首页 > 解决方案 > 如何测试取消 TokenSource 的方法?

问题描述

我对取消 TokenSource 的方法进行单元测试时遇到问题。

SUT 方法很简单:

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

            TokenSource.Cancel();

            CommandCompletedControlsSetup();
        }

并由命令执行调用:

TaskCancellationCommand = new DelegateCommand(OnTaskCancellationExecute);

CommandCompletedControlsSetupTokenSource取消后执行的方法包含:

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在测试方法中调用truebefore 再次更改为falseafter ?CommandCompletedControlsSetup还是我的架构有问题?我应该在测试方法中创建一些任务并以某种方式附加 SUT 令牌吗?

标签: c#wpfmvvmxunitcancellationtokensource

解决方案


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


推荐阅读