2014-05-24 57 views
1

我只有以下輸入數據:接口和類。我沒有實現接口的類,也沒有關於客戶端的數據,他的id和其他數據。只有以下:NUnit使用Moq進行測試以及大量缺失數據,是否正確?

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

+0

聽起來愚蠢的限制......或家庭作業......在任何情況下看看'設置Moq快速入門的方法https://github.com/Moq/moq4/wiki/Quickstart。完成閱讀後,請澄清什麼是你不清楚和更新後。 –

回答

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); 
} 
+2

+1。請注意,驗證交互可能需要根據您的任務或團隊編碼指南進行單獨測試,或根本不需要完成。 –

相關問題