使用Moq进行NUnit测试和大量缺失数据,是否正确?

时间:2014-05-24 06:20:45

标签: c# .net unit-testing nunit moq

我只有以下输入数据:接口和类。我没有实现接口的类,也没有关于客户端,其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); 
}

而且,做Assert我只猜测它必须比-1更大,所以我不能完全确定这是否正确。另外我只假设有一个clientId = 1

1 个答案:

答案 0 :(得分:2)

由于您正在测试服务外观/代理,因此模拟服务接口将允许您确定与模拟接口的交互是否正确(需要在实际服务的另一端进行单元测试)确保对客户进行了正确的交易。)

您还可以在通话前后测试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);
}