我正在尝试在一个非常简单的界面上进行单元测试。 我的界面是:
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());
为什么?
答案 0 :(得分:3)
在您的设置中,您正在设置将传递特定字符串的期望(例如“David”)。
你告诉Moq,“如果用字符串”David“调用该方法,则返回”retStr“,否则返回默认值(对于string,null)。因此,当你执行.ToString()
时在方法的结果上,对象为null。
同样的事情适用于第二个例子。
为了获得更一般的返回值,请在设置方法时使用It.IsAny<string>()
。或者,按照您的预期进行测试,并在调用方法时发送“David”。