0

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

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());

为什么?

4

1 回答 1

3

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

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

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

为了做出更通用的返回值,It.IsAny<string>()在设置方法时使用。或者,按照您在测试中的预期执行操作,并在调用该方法时发送“David”。

于 2012-12-22T22:23:19.303 回答