Moq没有进行任何调用

问题描述 投票:2回答:2

我的单元测试给了我

“已配置的设置: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>()));

c# unit-testing moq
2个回答
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


0
投票

你应该像这样设置你的方法:

service.Setup(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>())).Returns(/*insert count result*/);

然后你的模拟会知道它被调用了。

编辑:此外,你的CountChecks方法不应该返回计数值吗?

© www.soinside.com 2019 - 2024. All rights reserved.