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 を実行すると、オブジェクトはヌルです。

同じことが 2 番目の例にも当てはまります。

より一般的な戻り値にするためIt.IsAny<string>()に、メソッドを設定するときに使用します。または、テストで期待どおりに実行し、メソッドを呼び出すときに「David」を送信します。

于 2012-12-22T22:23:19.303 に答える