C# 强制DbContext在单元测试中对SaveChanges()引发异常

C# 强制DbContext在单元测试中对SaveChanges()引发异常,c#,unit-testing,entity-framework-core,ef-core-2.2,C#,Unit Testing,Entity Framework Core,Ef Core 2.2,我使用EF Core 2.2.0和InMemoryDatabase进行测试。有没有办法让它在调用操作时抛出异常,例如SaveChanges或Find 我想验证我的业务逻辑是否以特定方式处理异常。我知道我可以同时抽象DbContext,但是使用EF-Core和InMemoryDatabase我希望直接访问DbContext而不需要任何抽象 在我的单元测试中,我目前正在创建DbContext,如下所示: var dbOptions = new DbContextOptionsBuilder<M

我使用EF Core 2.2.0和InMemoryDatabase进行测试。有没有办法让它在调用操作时抛出异常,例如
SaveChanges
Find

我想验证我的业务逻辑是否以特定方式处理异常。我知道我可以同时抽象
DbContext
,但是使用EF-Core和
InMemoryDatabase
我希望直接访问DbContext而不需要任何抽象

在我的单元测试中,我目前正在创建
DbContext
,如下所示:

var dbOptions = new DbContextOptionsBuilder<MyContext>()
        .UseInMemoryDatabase(Guid.NewGuid().ToString())
        .Options;
var context = new MyContext(dbOptions));

您可以使用我的EntityFrameworkCoreMock库作为基础,请参阅

然后重写
SaveChanges
方法的行为,如下所示:

dbContextMock.Setup(x => x.SaveChanges()).Callback(() => throw new Exception());

如果不使用模拟的抽象,继承可能是路径。创建派生类,重写所需成员以在调用时引发异常,相应地更新测试。
dbContextMock.Setup(x => x.SaveChanges()).Callback(() => throw new Exception());