Как протестировать метод с отменой TokenSource? - PullRequest
0 голосов
/ 15 июня 2019

У меня проблемы с модульным тестированием метода с отменой TokenSource.

Метод SUT очень прост:

public void OnTaskCancellationExecute(object obj)
        {
            TaskCancellation = true;

            TokenSource.Cancel();

            CommandCompletedControlsSetup();
        }

И вызывается при выполнении команды:

TaskCancellationCommand = new DelegateCommand(OnTaskCancellationExecute);

CommandCompletedControlsSetup метод, который выполняется после отмены TokenSource, содержит:

TaskCancellation = false;

Мой метод тестирования:

[Fact]
    public void OnTaskCancellationExecute_CancelTask_True()
    {
        _viewModel.TaskCancellation = false;
        _viewModel.TokenSource = new CancellationTokenSource();

        _viewModel.TaskCancellationCommand.Execute(null);

        Assert.True(_viewModel.TaskCancellation);
    }

Отмена всех задач с TokenSource в SUT занимает некоторое время в работающем решении.Но не в модульном тестировании.Как мне Assert, чтобы _viewModel.TaskCancellation было true, до того, как снова было изменено на false после вызова CommandCompletedControlsSetup в тестируемом методе?Или это какая-то проблема с моей архитектурой?Должен ли я создать несколько задач в тестовом методе и каким-либо образом прикрепить токены SUT?

1 Ответ

2 голосов
/ 15 июня 2019

Таким образом, это невозможно. Поскольку вы устанавливаете TaskCancellation явно на true сразу после ввода метода, вам не нужно тестировать само свойство. Это будет работать, конечно. Если значение TaskCancellation является результатом операции, вы бы протестировали эту операцию отдельно. Если значение TaskCancellation является результатом условия, вы должны проверить это условие отдельно. Чтобы проверить пример кода, вы сначала утверждаете, что TokenSource.IsCancellationRequested равно true после выполнения команды. Затем напишите второй контрольный пример для проверки CommandCompletedControlsSetup().

...