Ada*_*dam 1 c# unit-testing moq mocking
我无法让我的验证工作在数据库调用上.
我有一个方法,我只是想验证是否进行了数据库调用.
我无法发布真实的代码,但这是一个很好的例子.
protected void ReportDB(uint waitTimeInMinutes)
{
//check database connection
Status dbStatus = Status.Ok;
string dbComment = "ok";
try
{
Data.GetActive("1");
}
catch (Exception ex)
{
dbComment = "Unable to access the database: " + ex.Message;
dbStatus = Status.Critical;
}
//Report Status.
}
Run Code Online (Sandbox Code Playgroud)
所以基本上GetActive()方法只是进行数据库调用.如果它没有抛出异常那么我们就很好并且连接性正在提升.
我的测试方法是.
[TestMethod]
public void ReportDBStatusTest()
{
_fakeData.Setup(s => s.Data.GetActive(It.IsAny<string>()));
_unitUnderTest = new Service();
_unitUnderTest.ReportDB(0);
_fakeData.Verify(s => s.Data.GetActive(It.IsAny<string>()), Times.Once());
}
Run Code Online (Sandbox Code Playgroud)
我调试通过调用方法和一切,但验证说它被称为Times.Never.我想我可能只是误解了如何正确地做到这一点.
错误:
模拟一次的预期调用,但是是0次:s => s.Data.GetActive(It.IsAny())配置的设置和调用:
错误是预期的.这是因为'ReportDB'对象中的'Data'对象与'_fakeData'对象中的'Data'对象不同.
一种解决方法是将"ReportDB"对象中的"Data"对象外部化,以便可以对其进行模拟.否则,您需要更改单元测试.