C # – Издевательство над методом, возвращающим другое значение при повторном вызове с использованием Moq

#c# #moq #automoq

#c# #moq #automoq

Вопрос:

я использую Moq для макетирования репозитория с помощью асинхронного метода. Этот метод должен быть вызван 2 раза. При первом вызове этого метода мне нужно получить нулевое значение. Во-вторых, мне нужно получить некоторый параметр. Если этот метод не был асинхронным, я могу использовать

  autoMockContext
            .Mock<IPopulationReadRepository>()
            .SetupSequence(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
            .Returns(null)
            .Returns(new Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" });
 

Итак, ошибка в последней строке. Результат должен быть таким:

  autoMockContext
            .Mock<IPopulationReadRepository>()
            .Setup(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
            .Returns(null);

 autoMockContext
            .Mock<IPopulationReadRepository>()
            .Setup(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
            .ReturnsAsync(new Entities.Zonning.Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" });
 

Но мне это нужно за один вызов?

Ответ №1:

Спасибо, я решил эту проблему

       autoMockContext
            .Mock<IPopulationReadRepository>()
            .SetupSequence(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
            .Returns(Task.FromResult<Entities.Zonning.Population>(null))
            .Returns(Task.FromResult(new Entities.Zonning.Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" }));