2009-01-28 72 views
0

我有一些測試代碼,看起來像這樣:我應該使用moq來測試一個方法是否被調用?

[Test] 
public void RunTableInfoCommandShouldCallTableINfoWithName() 
{ 
    string expectedcommand = "TableInfo(TestTable,1)"; 

    Table.RunTableInfoCommand(mockmapinfo.Object, 
          "TestTable", 
          TableInfoEnum.TAB_INFO_NAME); //This is just an enum for 1. 

    mockmapinfo.Verify(m => m.Evaluate(expectedcommand)); 
} 

我應該用一個模擬對象創建一個測試只是爲了看看所使用的模擬預期的命令被稱爲RunTableInfoCommand

或者我應該只是有一個測試,檢查RunTableInfoCommand的輸出,並在那裏使用模擬,因爲這將測試以查看是否也進行了調用。

RunTableInfoCommand返回一個字符串,你可以看到我沒有在這裏使用它,因爲我只想看看是否調用了TableInfo命令。

回答

2

我不認爲你應該測試,看看你調用的函數是否被調用。你應該假設它會。

您可能最擅長的是測試行爲。例如,設置一個具有調用RunTableInfoCommand作爲其預期行爲一部分的函數的測試。

然後檢查結果是你的預期。

例如

[Test] 
public void GetTableName() 
{ 
    string expectedName = "TableInfo(TestTable,1)"; 
    Assert.AreEqual(testTable.GetTableName(mockmapinfo.Object) = expectedName); 
} 

在這個例子中,GetTableName實際上是調用RunTableInfoCommand的函數。所以你正在測試一個對象的接口或行爲。

希望這會有所幫助。

相關問題