我对使用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
true
是false
,然后又再次更改为CommandCompletedControlsSetup
?还是我的体系结构有点问题?我应该在测试方法中创建一些任务并以某种方式附加SUT令牌吗?
答案 0 :(得分:2)
这样是不可能的。由于您在输入方法后立即将TaskCancellation
明确地设置为true
,因此您不需要测试属性本身。当然可以。如果TaskCancellation
的值是某个操作的结果,则应单独测试该操作。如果TaskCancellation
的值是条件的结果,则可以单独测试该条件。为了测试您的示例代码,您首先需要在命令执行后断言TokenSource.IsCancellationRequested
是true
。然后编写第二个测试用例以测试CommandCompletedControlsSetup()
。