我应该创建一个接口并模拟这个类

时间:2009-01-12 06:39:59

标签: c# mocking

我有这个名为Table的类:

class Table
{
    public string Name
    {
        get
        {
            return this.wrapper.Eval(//some command); 
            //wrapper is pass in by the ctor and is a COM object.
        }
    }
}

在本课程中使用:

class Map
{
  public Map MapTable(Table table)
  {
     return new Map(table.Name);
  }
}

我想测试MapTable命令,我应该模拟Table还是应该模拟表对象使用的包装器对象。

我在想这样的事情

 Test()
 {
   Mock<ITable> mocktable = new Mock<ITable>(//pass in the wrapper object);
   mocktable.ExpectGet(n => n.Name).Returns("Hello World");

   ITable table = mocktable.object;
   Map mymap = Map.MapTable(table);
 }

那会是正确的吗?

3 个答案:

答案 0 :(得分:1)

除了通常没有一个完美的测试解决方案之外,我首先要去模拟COM对象:应该有一个可用的接口,你可能想要测试一切“在上面“它。

如果Table包含非平凡代码(例如在Eval()内;有条件的任何内容;或者例如使用Culture进行解析),您可能希望将其模拟为你在你的例子中展示。

答案 1 :(得分:1)

您的示例看起来很好,如果您想测试Map对象,则应该模拟Table对象。

如果你这样做,反过来就不会测试Map构造函数。

答案 2 :(得分:0)

帮助我理解。看起来您只需要表中的名称,而不是表本身。在这种情况下,为什么不直接传递名称并将表格从中删除呢?