我应该使用moq来测试方法是否被调用?

时间:2009-01-28 04:57:28

标签: c# .net unit-testing tdd mocking

我有一些看起来像这样的测试代码:

[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命令。

1 个答案:

答案 0 :(得分:2)

我认为您不应该测试是否要调用您正在调用的函数。你应该假设它会。

您最擅长的是测试行为。例如,设置一个测试,该测试具有调用RunTableInfoCommand作为其预期行为的一部分的函数。

然后检查结果是否符合预期。

e.g。

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

在此示例中,GetTableName实际上是调用RunTableInfoCommand的函数。因此,您正在测试对象的接口或行为。

希望这有帮助。