我的单元测试给了我
“已配置的设置:x => x.GetCount(It.IsAny(), It.IsAny())没有进行任何调用。“
这是以下方法:
private IService Client = null;
public void CountChecks()
{
Client = new ServiceClient();
var _amount = Client.GetCount(value01, value01);
}
这是我的测试类:
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>()));
}
}
当我调试测试时,该方法被调用。那么,为什么我得到No Invocations执行错误?错误发生在service.Verify(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>()));
答案 0 :(得分:2)
每次调用CountChecks
方法时,您都会创建IService
的新实例,即ServiceClient
并将其分配给您的类型Client
属性,片:
public void CountChecks()
{
Client = new ServiceClient();
...
因此,您的测试方法永远不会调用IService
的模拟实例,而是调用内部创建的ServiceClient
。
为了解决此问题,您需要在IService
实例中注入模拟的CountChecksClass
实例,例如:
checker = new CountChecksClass(service.Object);
...
public CountChecksClass(IService service)
{
Client = service;
}
并且不要忘记从Client = new ServiceClient();
方法中移除CountChecks
。
答案 1 :(得分:0)
你应该像这样设置你的方法:
service.Setup(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>())).Returns(/*insert count result*/);
然后你的模拟器就会知道它已被召唤。
编辑:此外,你的CountChecks方法不应该返回计数值吗?