moq-为什么不能使用默认参数操作功能

时间:2012-12-22 21:43:19

标签: unit-testing mocking tdd

我正在尝试在一个非常简单的界面上进行单元测试。 我的界面是:

public interface Interface1
    {
        string retStr(string dd);
        string retStr2(string dd,string fff);
    }

这是模拟:

var myMoq = new  Mock<Interface1>();

myMoq.Setup(d => d.retStr("David")).Returns("retStr");
Console.WriteLine(myMoq.Object.retStr("fdf").ToString());
I GOT runtime error: Object reference not set to an instance of an object.

和实施方面的另一个错误:

myMoq.Setup(d => d.retStr2(It.Is<string>(e=>e=="qqq"), It.IsAny<string>())).Returns("2 parameters");
Console.WriteLine(myMoq.Object.retStr2("fdf","wewew").ToString());

为什么?

1 个答案:

答案 0 :(得分:3)

在您的设置中,您正在设置将传递特定字符串的期望(例如“David”)。

你告诉Moq,“如果用字符串”David“调用该方法,则返回”retStr“,否则返回默认值(对于string,null)。因此,当你执行.ToString()时在方法的结果上,对象为null。

同样的事情适用于第二个例子。

为了获得更一般的返回值,请在设置方法时使用It.IsAny<string>()。或者,按照您的预期进行测试,并在调用方法时发送“David”。