Невозможно имитировать метод для множественного вызова с возвратами

Я пытаюсь издеваться над методом, который принимает два параметра int и out параметра bool. Я могу правильно настроить его при первом вызове, и он возвращает правильное значение и возвращаемое значение. Однако при попытке вызвать тот же метод во второй раз он не вызывает моего делегата. Любая идея, что здесь не так:

Что я пробовал:

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

person Yogesh    schedule 18.08.2016    source источник


Ответы (1)


Проблема с имитацией параметров out заключается в том, что значение изменяется при каждом вызове, так что вызов, изначально помеченный параметром Returns, больше не соответствует.

Вы правильно определили обходной путь использования ReturnsForAnyArgs, как описано в этом ответе.

person David Tchepak    schedule 18.08.2016