我有一些看起来像这样的测试代码:
[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命令。
答案 0 :(得分:2)
我认为您不应该测试是否要调用您正在调用的函数。你应该假设它会。
您最擅长的是测试行为。例如,设置一个测试,该测试具有调用RunTableInfoCommand作为其预期行为的一部分的函数。
然后检查结果是否符合预期。
e.g。
[Test]
public void GetTableName()
{
string expectedName = "TableInfo(TestTable,1)";
Assert.AreEqual(testTable.GetTableName(mockmapinfo.Object) = expectedName);
}
在此示例中,GetTableName实际上是调用RunTableInfoCommand的函数。因此,您正在测试对象的接口或行为。
希望这有帮助。