2009-01-30 106 views
0

我在使用moq进行一些单元测试时遇到了一些麻烦。我应该使用mocks来测试方法实现吗

如果我有这样的功能:

public string GetName(IMapinfoWrapper wrapper) 
{ 
    return wrapper.Evaluate("My com command"); 
    ///"My comm command" is the same all the time. 
} 

然后,我有一个测试,检查的GetName函数的返回值:

[Test] 
public void Test() 
{ 
    Mock<IMapinfoWrapper> mock = new Mock<IMapinfoWrapper>(); 
    mock.Expect(mapinfo => mapinfo.Evaluate(It.IsAny<String>())) 
     .Returns("TableName"); 

    Assert.AreEqual("TableName", GetName(mock.object)); 
} 

所以我的问题是要模拟进行定义像这样:

mock.Expect(mapinfo => mapinfo.Evaluate(It.IsAny<String>())) 
    .Returns("TableName"); 

或像这样:

mock.Expect(mapinfo => mapinfo.Evaluate("My com command") 
    .Returns("TableName"); 

我使用第二种方法唯一的问题是,我觉得我绑定方法GetName的实现,以便始终在内部使用“我的com命令”字符串。

难道这是我应该做的事情还是我做的这一切错了?
我只开始进行单元测试和嘲笑,所以我仍然不确定应该如何结合在一起。

回答

3

这取决于你实际测试的是什么。

如果期望是通过以评估任何字符串将返回“表名”,然后使用调用IsAny。

否则,如果你期待给特定的输入特定的输出,比如通过“我的COM命令”的话,那么通过第二。

看起来你并不是在寻找特定的输入,而是在这种情况下进行基本的理智检查,所以我会说前者是正确的举措(在这种情况下再次,但你应该有更具体的如果你有用例的话)。

相关问题