无法使用返回

时间:2016-08-18 01:36:25

标签: nsubstitute

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

我尝试了什么:

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" } };
        }
    });

1 个答案:

答案 0 :(得分:1)

模拟[^# ]print参数的问题是该值会更改每次调用,因此最初与out存根的调用不再匹配。

您已正确确定使用Returns的解决方法,为described in this answer