Хорошо, я пытаюсь выяснить это уже несколько часов, поэтому я решил задать вопрос здесь.
Я использую 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);
}
Что я делаю не так? Почему нет вызова на макете ?