データベースからデータを取得する関数に次のコードがあります。
var oldFareSpecification = new ObservationOnOrBeforeDateSpecification(previousOutboundDate));
var oldFare = _fareRepository.Find(oldFareSpecification).SingleOrDefault();
仕様は次のとおりです。
public class ObservationOnOrBeforeDateSpecification : Specification<Fare>
{
public ObservationOnOrBeforeDateSpecification(DateTime date)
: base(fh => EntityFunctions.DiffDays(fh.ObservationTS, date) >= 0)
{
}
}
System.Data.Entity を使用します。
リポジトリは
Repository<TEntity> : IRepository<TEntity>
private readonly DbContext _context;
private readonly DbSet<TEntity> _entitySet;
public IEnumerable<TEntity> Find(ISpecification<TEntity> criteria)
{
return criteria.SatisfyingEntitiesFrom(_entitySet).AsEnumerable();
}
それは正常に動作しますが、テスト クラスで Moq リポジトリにアクセスしようとして、偽のオブジェクトに対するクエリの結果を返すリポジトリを呼び出すと、例外が発生します。他の言語で: p)。
私のテストクラスは、データベースがこのように偽の結果を返すようにします:
var faresRepository = Fixture.Freeze<Mock<IRepository<DAL.Fare>>>();
faresRepository.Setup(
fhr => fhr.Find(It.IsAny<ISpecification<Fare>>())).Returns(
(ISpecification<Fare> spec) => spec.SatisfyingEntitiesFrom(fares.AsQueryable()));
そして今、私の質問は、日数の違いを比較し、コードから正常に呼び出され、モックされたリポジトリで正常に動作する仕様をどのようにコーディングできるかです。ここで言う正しい比較とは、2013.01.16 23:55:34 と 2013.01.17 01:55:34 の日数差は 1 を返すということです。