繁体   English   中英

使用Moq进行NUnit测试并丢失大量数据,对吗?

[英]NUnit Test with Moq and lots of missing data, is it correct?

我只有以下输入数据:接口和类。 我没有实现该接口的类,也没有有关客户端的任何数据,他的ID和其他数据。 仅以下内容:

public interface IService
{
double GetData(int clientId);
}

public class ClientInfo
{
   private int _clientId;
   private IService _svc;
   public double MoneySun;

   public ClientInfo(int clientId, IService svc) 
  {
   _clientId = clientId;
   _svc = svc;
  }


   public void UpdateMoney()
   {
    MoneySun = _svc.GetData(_clientId);
   }

}

而且我需要为UpdateMoney方法编写一个单元测试(考虑到我只有上面发布的信息,因此需要考虑)

我写了以下测试,并想咨询一下是否正确?

[Test]
public void GetData()
{
    Mock<IService> moqSvc = new Mock<IService>();
    var сInfo = new ClientInfo(1, moqSvc.Object);
    сInfo.UpdateMoney();

    Assert.Greater(сInfo.MoneySun, -1); 
}

而且,在断言时,我只猜测它必须比-1更好,所以我不确定这是否正确。 我也只假设有一个clientId = 1

由于您正在测试服务外观/代理,因此可以通过对服务接口进行模拟来确定与模拟接口的交互是否正确(需要在实际服务的另一端进行单元测试,以确保正确的交易已完成给客户)。

您还可以在调用之前和之后测试sut( ClientInfo )的状态是否一致:

[Test]
public void GetData()
{
    var moqSvc = new Mock<IService>();
    // Provide some fake data to ensure that the SUT uses the return value correctly
    moqSvc.Setup(x => x.GetData(It.IsAny(int))).Returns(123.45);
    var сInfo = new ClientInfo(1, moqSvc.Object);
    // Ensure correct initial state
    Assert.AreEqual(0, cInfo.MoneySun)

    сInfo.UpdateMoney();

    // Ensure correct final state
    Assert.AreEqual(123.45, cInfo.MoneySun)
    // Ensure correct interaction with the service
    moqSvc.Verify(x => x.GetData(1), Times.Once);
    moqSvc.Verify(x => x.GetData(It.IsAny<int>(i => i != 1)), Times.Never);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM