Я впервые пишу модульные тесты для асинхронного метода. Я использую xUnit . Я искал SO без многообещающих результатов. Лучшее, что я нашел, но у меня не получилось, это реализовать IAsyncLifetime
из ЭТОГО примера. Я буду благодарен за любые подсказки, как решить эту проблему.
В настоящее время, что у меня есть. В тестируемой ВМ у меня есть команда:
public ICommand TestResultsCommand { get; private set; }
И команда инициализируется в конструкторе VM, как показано ниже:
TestResultsCommand = new DelegateCommand(OnTestResultExecuteAsync);
Метод вызова команды:
private async void OnTestResultExecuteAsync(object obj)
{
TokenSource = new CancellationTokenSource();
CancellationToken = TokenSource.Token;
await TestHistoricalResultsAsync();
}
TestHistoricalResultsAsync подпись метода, как показано ниже:
private async Task TestHistoricalResultsAsync()
Теперь давайте перейдем к проекту модульного теста. В настоящее время в тестовом классе у меня есть метод:
[Fact]//testing async void
public void OnTestResultExecuteAsync_ShouldCreateCancellationTokenSource_True()
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken cancellationToken = tokenSource.Token;
_viewModel.TestResultsCommand.Execute(null);
Assert.Equal(cancellationToken.CanBeCanceled, _viewModel.CancellationToken.CanBeCanceled);
Assert.Equal(cancellationToken.IsCancellationRequested, _viewModel.CancellationToken.IsCancellationRequested);
}
И тест бросает мне исключение:
Сообщение: System.NullReferenceException: ссылка на объект не установлена в
экземпляр объекта.
Трассировка стека для исключения:
Заранее благодарим вас за ваше время и предложения.