Как настроить вызов метода внутри другого вызова метода, чтобы получить разные результаты - PullRequest
0 голосов
/ 23 октября 2018

У меня есть метод, подобный следующему:

public List<Item> MethodA() {
    List<Things> result1 = MethodB(param1);
    if(result1==null)
        //Do Something

    List<Things> result2 = MethodB(param2);

    //Do Something 
}

Я пытался смоделировать этот метод, используя Moq, для модульного тестирования, как показано ниже:

//Mocking the call to MethodB to return null the second time it's called
mockService.SetupSequence(x=>x.MethodB(It.IsAny<List<Things>>()))
.Returns(GetList())
.Returns(null);

//Call to method A to run the test
MethodA();

Однако это не таккажется, работает, и я получаю только список в качестве возвращаемого результата для MethodB после насмешки.Тем не менее, я хочу, чтобы список был возвращен при первом вызове и пустым при втором вызове.Любые указатели / мысли / идеи, как этого добиться, были бы очень полезны.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если вы издеваетесь над тем же классом, который тестируете, убедитесь, что вы используете CallBase () для метода, который хотите запустить, иначе макет не запустит код.

mockService.Setup(x => x.MethodA()).CallBase();

Когда я попытался запустить ваш пример с MethodA, установленным в CallBase, я получил ожидаемые результаты.

0 голосов
/ 23 октября 2018

Попробуйте избавиться от второго вызова .Returns (null), по умолчанию он возвращает ноль, если последовательность не указана.

Рабочий пример:

public class UnitTest
{
    [Fact]
    public void Test1()
    {
        var serviceMock = new Mock<IService>();
        serviceMock.SetupSequence(s => s.MethodB(It.IsAny<List<object>>()))
            .Returns(new List<int>());

        var service = serviceMock.Object;
        Assert.NotNull(service.MethodB(new List<object>()));
        Assert.Null(service.MethodB(new List<object>()));
    }
}

public interface IService
{
    List<int> MethodB(List<object> objects);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...