使用 FakeItEasy 和 DBContext 进行模拟不起作用
Mocking with FakeItEasy and DBContext does not work
为什么这个测试代码不起作用?
测试中的方法 CheckDbAsync()-Class:
public async Task<bool> CheckDbAsync()
{
return await DbContext
.GetDatabase()
.CanConnectAsync(default);
}
使用 FakeItEasy 的测试代码:
var dbContext = A.Fake<IDbContext>();
A.CallTo(() => dbContext
.GetDatabase()
.CanConnectAsync(default))
.Returns(Task.FromResult(true));
var tc= new Testclass(dbContext);
bool result=await tc.CheckDbAsync();
总是returns错误,不正确。
什么是 IDbContext
和 GetDatabase
?我找不到这些东西的参考资料。也许是因为我不是 EntityFramework 用户,也许是因为它们是您自己的东西?回答这些问题时了解更多上下文很有帮助。
这里没有太多内容,但我猜:
GetDatabase
是 return 每次你调用它时都是一个不同的对象。这是 FakeItEasy 伪造的未配置方法的标准行为。
所以你配置了一个什么-return-type-of-GetDatabase-is,然后另一个在 CheckDbAsync
.
中使用
要验证,您可以检查对象的引用是否相等。
为了解决这个问题,您可能需要将 dbContext.GetDatabase
配置为始终 return 相同的 return-GetDatabase 类型。
(观察到的行为的另一个原因:测试 class 中的 dbContext
和生产代码中的 DBContext
之间没有联系。我们看到你通过了 dbContext
进入 Testclass
构造函数,但我们不知道 dbContext
之后会发生什么。或者即使 CheckDbAsync
方法是相同的 Testclass
[=36] 的一部分=]。我想是的,你只是将 dbContext
存储在 DbContext
属性 中,但我不能确定,我想我会提到它,只是万一那才是真正的问题。)
为什么这个测试代码不起作用?
测试中的方法 CheckDbAsync()-Class:
public async Task<bool> CheckDbAsync()
{
return await DbContext
.GetDatabase()
.CanConnectAsync(default);
}
使用 FakeItEasy 的测试代码:
var dbContext = A.Fake<IDbContext>();
A.CallTo(() => dbContext
.GetDatabase()
.CanConnectAsync(default))
.Returns(Task.FromResult(true));
var tc= new Testclass(dbContext);
bool result=await tc.CheckDbAsync();
总是returns错误,不正确。
什么是 IDbContext
和 GetDatabase
?我找不到这些东西的参考资料。也许是因为我不是 EntityFramework 用户,也许是因为它们是您自己的东西?回答这些问题时了解更多上下文很有帮助。
这里没有太多内容,但我猜:
GetDatabase
是 return 每次你调用它时都是一个不同的对象。这是 FakeItEasy 伪造的未配置方法的标准行为。
所以你配置了一个什么-return-type-of-GetDatabase-is,然后另一个在 CheckDbAsync
.
要验证,您可以检查对象的引用是否相等。
为了解决这个问题,您可能需要将 dbContext.GetDatabase
配置为始终 return 相同的 return-GetDatabase 类型。
(观察到的行为的另一个原因:测试 class 中的 dbContext
和生产代码中的 DBContext
之间没有联系。我们看到你通过了 dbContext
进入 Testclass
构造函数,但我们不知道 dbContext
之后会发生什么。或者即使 CheckDbAsync
方法是相同的 Testclass
[=36] 的一部分=]。我想是的,你只是将 dbContext
存储在 DbContext
属性 中,但我不能确定,我想我会提到它,只是万一那才是真正的问题。)