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