Почему мой тестовый модуль вызова асинхронной команды не работает? - PullRequest
0 голосов
/ 08 июля 2019

Хорошо, я пытаюсь выяснить это уже несколько часов, поэтому я решил задать вопрос здесь.

Я использую xUnit и Moq framework.

Несколько слов о моем СУТ. У меня есть асинхронная команда:

public IAsyncCommand SimulateResultsCommand { get; private set; }

И команда вызывает метод:

SimulateResultsCommand = new AsyncCommand(async () => await OnSimulateResultsExecuteAsync());

Метод вызывает метод уровня обслуживания:

public async Task OnSimulateResultsExecuteAsync()
{
    //init controls here

    Races = await _simulateDataService.SimulateResultsAsync(It.IsAny<int>(), Races.Count, Races, Horses, Jockeys, RaceModelProvider);

    //reset controls here
}

Для создания асинхронной команды я обращаюсь к этому ответу . Проблема в том, что когда я тестирую его, тест не проходит с сообщением:

Сообщение: Moq.MockException: ожидаемый вызов на макет один раз, но было 0 раз: sd => sd.SimulateResultsAsync (It.IsAny (), 0, [], [], [], RaceModel)

Выполненные вызовы:

Макет (сд):

ISimulateService.SimulateResultsAsync (0, 0, [], [], [], RaceModel)

И тест выглядит так:

[Fact]
public async Task OnSimulateResultsExecuteAsync_CallsSimulateResultsAsync()
{
    List<RaceDetails> races = new List<RaceDetails>();
    List<LoadedHorse> horses = new List<LoadedHorse>();
    List<LoadedJockey> jockeys = new List<LoadedJockey>();
    RaceModel race = new RaceModel();

    await _viewModel.SimulateResultsCommand.ExecuteAsync(null);

    _simulateDataMock.Verify(sd => sd.SimulateResultsAsync(0, races.Count, races, horses, jockeys, race), Times.Once);
}

Макет впрыска:

private MainViewModel _viewModel;
private Mock<ISimulateService> _simulateDataMock;

public MainViewModelTests()
{
    _simulateDataMock = new Mock<ISimulateService>();

    _viewModel = new MainViewModel(_simulateDataMock.Object);
}

Что я делаю не так? Почему нет вызова на макете ?

1 Ответ

3 голосов
/ 08 июля 2019

Вы должны сопоставить аргументы по любому значению, используя It.IsAny<T>():

_simulateDataMock.Verify(sd => sd.SimulateResultsAsync(It.IsAny<int>(), It.IsAny<int>(),
    It.IsAny<List<RaceDetails>>(), It.IsAny<List<LoadedHorse>>(), It.IsAny<List<LoadedJockey>>(),
    It.IsAny<RaceModel>()), Times.Once);
...