2009-01-30 109 views
0

我在使用moq進行一些單元測試時遇到了一些麻煩。我應該使用mocks來測試方法實現嗎

如果我有這樣的功能:

public string GetName(IMapinfoWrapper wrapper) 
{ 
    return wrapper.Evaluate("My com command"); 
    ///"My comm command" is the same all the time. 
} 

然後,我有一個測試,檢查的GetName函數的返回值:

[Test] 
public void Test() 
{ 
    Mock<IMapinfoWrapper> mock = new Mock<IMapinfoWrapper>(); 
    mock.Expect(mapinfo => mapinfo.Evaluate(It.IsAny<String>())) 
     .Returns("TableName"); 

    Assert.AreEqual("TableName", GetName(mock.object)); 
} 

所以我的問題是要模擬進行定義像這樣:

mock.Expect(mapinfo => mapinfo.Evaluate(It.IsAny<String>())) 
    .Returns("TableName"); 

或像這樣:

mock.Expect(mapinfo => mapinfo.Evaluate("My com command") 
    .Returns("TableName"); 

我使用第二種方法唯一的問題是,我覺得我綁定方法GetName的實現,以便始終在內部使用「我的com命令」字符串。

難道這是我應該做的事情還是我做的這一切錯了?
我只開始進行單元測試和嘲笑,所以我仍然不確定應該如何結合在一起。

回答

3

這取決於你實際測試的是什麼。

如果期望是通過以評估任何字符串將返回「表名」,然後使用調用IsAny。

否則,如果你期待給特定的輸入特定的輸出,比如通過「我的COM命令」的話,那麼通過第二。

看起來你並不是在尋找特定的輸入,而是在這種情況下進行基本的理智檢查,所以我會說前者是正確的舉措(在這種情況下再次,但你應該有更具體的如果你有用例的話)。

相關問題