2016-07-12 6 views
0

EFでレイジーローディングを使用していないため、いくつかのインクルードを追加したときに私のユニットテストが壊れました。私のモックをセットアップラインだったの前に、この単一のためにうまく働いMoqセットアップパラメータlinqが含まれています

mockDocRepo.Setup(
      x => x.GetBy(It.IsAny<Expression<Func<Doctor, bool>>>(), It.IsAny<Expression<Func<Doctor, object>>>())) 
      .Returns(stubDoctor); 

は、しかし、別の追加が含まGetByを呼び出すと、すべての私のテストを壊したときに含まれています。たとえば:

var doctor = _dbContextScope.Repository<Doctor>().GetBy(x => x.Id == DoctorId, y => y.Contracts, y => y.Leave.Select(x => x.Type)); 

私は、配列例えばIt.IsAny<Expression<Func<Doctor, object>>[]>()しかし、これは動作するようには思えない受け入れるように私の部品番号の設定を変更しようとしました。また、私はちょうど第二には、セットアップに含める追加しようとした 例えば

mockDocRepo.Setup(
      x => x.GetBy(It.IsAny<Expression<Func<Doctor, bool>>>(), It.IsAny<Expression<Func<Doctor, object>>>(),It.IsAny<Expression<Func<Doctor, object>>>())) 
      .Returns(stubDoctor); 

すべてを壊すことなどが決勝で.Select(x => x.Type)のようです。

これを修正する方法については、どのようなアイデアも素晴らしいと思います。

答えて

0

私はMOQセットアップLinq Enumerable.Selectメソッドを行うことはできないと思います。 Enumerableクラスの静的メソッドです。

Moqを使用すると、静的メソッドをモック/セットアップすることはできません。セットアップするには仮想メソッドでなければなりません。

また、DbContextを抽象化し、.selectを仮想メソッドでラップしようとします。次に、セットアップを実行できるはずです。

関連する問題