EFのDbContext
をモックする必要があります。私はthe approach hereを使用し、うまく動作します。NSubstituteを使用してDbContextをモックし、データを追加/削除する方法
// mock a DbSet
var mockDbSet = Substitute.For<DbSet<Foo>, IQueryable<Foo>>();
var data = new List<Foo>().AsQueryable();
((IQueryable<Foo>)mockDbSet).Provider.Returns(data.Provider);
((IQueryable<Foo>)mockDbSet).Expression.Returns(data.Expression);
((IQueryable<Foo>)mockDbSet).ElementType.Returns(data.ElementType);
((IQueryable<Foo>)mockDbSet).GetEnumerator().Returns(data.GetEnumerator());
// now add it to a mock DbContext
var mockContext = Substitute.For<MyDbContextClass>();
mockContext.Set<Foo>().Returns(mockDbSet);
は、しかし、いくつかのテストでは、私はmockContext.Set<Foo>().Add(someFoo)
とmockContext.Set<Foo>().Remove(otherFoo)
、および基礎となる追加/削除するロジックが機能するために呼び出すことができるようにする必要があります。
私はこの試みた:
mockDbSet.When(x => x.Add(Arg.Any<Foo>())).Do(x => data.Add(x.Arg<Foo>()));
を、それは、どのように私は機能を追加/削除実装するのですCollection was modified; enumeration operation may not execute.
とスロー?
追加/削除が呼び出されたことを確認するのではなく、コンテキストに追加/削除する必要があります(これを行う方法はわかります)。 –
元の質問に最後のコメントを編集として含めてください。誰もコメントを読んでいないので、コメントとしてコメントする必要はありません。 – Igor
最近、このヘルパーライブラリを使用し始めました。追加/削除をサポートしているようです。私は今のような10のテストのためにそれを使用していますので、私はもっと知りませんhttps://github.com/scott-xu/EntityFramework.Testing – Stilgar