如何使用TokenSource取消测试方法?

时间:2019-06-15 08:55:37

标签: c# wpf mvvm xunit cancellationtokensource

我对使用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);
    }

在运行解决方案中,在SUT中用TokenSource取消所有任务需要一段时间。但不是在单元测试中。在测试方法中调用Assert之后,我应该如何_viewModel.TaskCancellation truefalse,然后又再次更改为CommandCompletedControlsSetup?还是我的体系结构有点问题?我应该在测试方法中创建一些任务并以某种方式附加SUT令牌吗?

1 个答案:

答案 0 :(得分:2)

这样是不可能的。由于您在输入方法后立即将TaskCancellation 明确地设置为true,因此您不需要测试属性本身。当然可以。如果TaskCancellation的值是某个操作的结果,则应单独测试该操作。如果TaskCancellation的值是条件的结果,则可以单独测试该条件。为了测试您的示例代码,您首先需要在命令执行后断言TokenSource.IsCancellationRequestedtrue。然后编写第二个测试用例以测试CommandCompletedControlsSetup()