【问题标题】:Should I be using a moq just to test if a method is called?我应该使用最小起订量来测试是否调用了方法吗?
【发布时间】:2009-01-28 04:57:27
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    例如

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      相关资源
      最近更新 更多