我有这个名为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);
}
那会是正确的吗?
答案 0 :(得分:1)
除了通常没有一个完美的测试解决方案之外,我首先要去模拟COM对象:应该有一个可用的接口,你可能想要测试一切“在上面“它。
如果Table
包含非平凡代码(例如在Eval()
内;有条件的任何内容;或者例如使用Culture
进行解析),您可能希望将其模拟为你在你的例子中展示。
答案 1 :(得分:1)
是您的示例看起来很好,如果您想测试Map对象,则应该模拟Table对象。
如果你这样做,反过来就不会测试Map构造函数。
答案 2 :(得分:0)
帮助我理解。看起来您只需要表中的名称,而不是表本身。在这种情况下,为什么不直接传递名称并将表格从中删除呢?