81

最初に戻り、その後メソッドが呼び出される0たびに戻るモックが必要です。1問題は、メソッドが 4 回呼び出された場合、次のように記述しなければならないことです。

mock.SetupSequence(x => x.GetNumber())
    .Returns(0)
    .Returns(1)
    .Returns(1)
    .Returns(1);

それ以外の場合、メソッドは null を返します。

最初の呼び出しの後、メソッドが返すことを記述する方法はあります1か?

4

5 に答える 5

67

最もクリーンな方法は、メソッドを作成してQueueに渡すことです.DequeueReturns

.Returns(new Queue<int>(new[] { 0, 1, 1, 1 }).Dequeue);

于 2012-07-03T10:02:33.137 に答える
54

それは特に空想的ではありませんが、うまくいくと思います:

    var firstTime = true;

    mock.Setup(x => x.GetNumber())
        .Returns(()=>
                        {
                            if(!firstTime)
                                return 1;

                            firstTime = false;
                            return 0;
                        });
于 2012-07-03T09:59:26.633 に答える
4

一時変数を使用して、メソッドが呼び出された回数を追跡できます。

例:

public interface ITest
{ Int32 GetNumber(); }

static class Program
{
    static void Main()
    {
        var a = new Mock<ITest>();

        var f = 0;
        a.Setup(x => x.GetNumber()).Returns(() => f++ == 0 ? 0 : 1);

        Debug.Assert(a.Object.GetNumber() == 0);
        for (var i = 0; i<100; i++)
            Debug.Assert(a.Object.GetNumber() == 1);
    }
}
于 2012-07-03T09:59:47.967 に答える