我正在使用带有InMemoryDatabase
的EF Core 2.2.0进行测试。有没有一种方法可以使它在调用诸如SaveChanges
或Find
之类的操作时引发异常?
我想验证我的业务逻辑是否正在以特定方式处理异常。我知道我可以一起抽象DbContext
,但是我希望使用EF Core和InMemoryDatabase
直接访问DbContext,而无需更多抽象。
在单元测试中,我目前正在这样创建DbContext
:
var dbOptions = new DbContextOptionsBuilder<MyContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
var context = new MyContext(dbOptions));
我的逻辑(极其简化):
public MyClass
{
private MyContext _context;
public MyClass(MyContext context)
{
_context = context;
}
public void SomeMethod()
{
try
{
*/ .. Other stuff .. */
var entity = context.Find(id);
entity.SomeProperty = "Foo";
context.SaveChanges();
}
catch(Exception e)
{
// I want to test this code...
Log.Write("Something");
DoSomethingElse();
}
}
}
答案 0 :(得分:1)
您可以将EntityFrameworkCoreMock库用作基础,请参见https://github.com/huysentruitw/entity-framework-core-mock
,然后像这样重写SaveChanges
方法的行为:
dbContextMock.Setup(x => x.SaveChanges()).Callback(() => throw new Exception());