无法使用 Returns 模拟多次调用的方法

Cannot mock a method for multiple invocation with Returns

我正在尝试模拟一个方法,该方法采用 bool 的两个参数 int 和 out 参数。我能够在第一次调用时正确设置它,它 return 是正确的输出值和 return 值。但是,当第二次尝试调用相同的方法时,它并没有调用我的委托。知道这里出了什么问题:

我尝试了什么:

mock.GetRows(Arg.Is<int>(10), out moreRows).Returns(x =>
    {
        if (first)
        {
            first = false;
            x[1] = true;
            return new object[][] { new object[] { null, "Collêction Namê" }, new object[] { null, "Collêction Name" }, new object[] { null, "COllection Name" } };
        }
        else
        {
            x[1] = false;
            return new object[][] { new object[] { collectionId, "Collection Name" } };
        }
    });

我也试过这个:

mock.GetRows(Arg.Is<int>(10), out moreRows).Returns(
    x =>
    {
        first = false;
        x[1] = true;
        return new object[][] { new object[] { null, "Collêction Namê" }, new object[] { null, "Collêction Name" }, new object[] { null, "COllection Name" } };
    },
    x=>
    {
       x[1] = false;
       return new object[][] { new object[] { collectionId, "Collection Name" } };
    });

然而这有效:

.ReturnsForAnyArgs(x =>
    {
        if (first)
        {
            first = false;
            x[1] = true;
            return new object[][] { new object[] { null, "Collêction Namê" }, new object[] { null, "Collêction Name" }, new object[] { null, "COllection Name" } };
        }
        else
        {
            x[1] = false;
            return new object[][] { new object[] { collectionId, "Collection Name" } };
        }
    });

模拟 out 参数的问题是每次调用时值都会改变,因此最初用 Returns 存根的调用不再匹配。

您已正确识别使用 ReturnsForAnyArgs 的解决方法,如