spm*_*man 5 c# unit-testing moq
我的单元测试给了我
“配置的设置:x => x.GetCount(It.IsAny(), It.IsAny()) 未执行任何调用。”
这是下面的方法:
private IService Client = null;
public void CountChecks()
{
Client = new ServiceClient();
var _amount = Client.GetCount(value01, value01);
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试课:
public class CountChecksClassTests
{
private Mock<IService > service { get; set; }
private CountChecksClass { get; set; }
[TestInitialize]
public void Setup()
{
service = new Mock<IService>();
service.Setup(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>()));
checker = new CountChecksClass ();
}
[TestMethod()]
public void GetCountTest()
{
checker.CountChecks();
service.Verify(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>()));
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试测试时,该方法被调用。那么,为什么我会收到“未执行调用”错误?错误发生在service.Verify(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>()));
每次调用CountChecks方法时,您都会创建一个新实例IService,即ServiceClient并将其分配给您类型的Client属性,这一部分:
public void CountChecks()
{
Client = new ServiceClient();
...
Run Code Online (Sandbox Code Playgroud)
因此,您的测试方法永远不会调用 的模拟实例IService,而是调用ServiceClient内部创建的实例。
为了解决这个问题,您需要IService在CountChecksClass实例中注入您的模拟实例,例如:
checker = new CountChecksClass(service.Object);
...
public CountChecksClass(IService service)
{
Client = service;
}
Run Code Online (Sandbox Code Playgroud)
Client = new ServiceClient();并且不要忘记从方法中删除CountChecks。
| 归档时间: |
|
| 查看次数: |
5008 次 |
| 最近记录: |