如何测试带有 TokenSource 取消的方法?
How to test a method with TokenSource cancellation?
我对取消 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
,然后在测试方法中调用 CommandCompletedControlsSetup
后再次更改为 false
?还是我的架构有问题?我应该在测试方法中创建一些任务并以某种方式附加 SUT 令牌吗?
这样是不行的。由于您在输入方法后立即将 TaskCancellation
显式 设置为 true
,因此您不需要测试 属性 本身。它当然会起作用。如果 TaskCancellation
的值是一个操作的结果,您将单独测试这个操作。如果 TaskCancellation
的值是条件的结果,您将单独测试该条件。要测试您的示例代码,您首先要在命令执行后断言 TokenSource.IsCancellationRequested
是 true
。然后写第二个测试用例来测试CommandCompletedControlsSetup()
.
我对取消 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
,然后在测试方法中调用 CommandCompletedControlsSetup
后再次更改为 false
?还是我的架构有问题?我应该在测试方法中创建一些任务并以某种方式附加 SUT 令牌吗?
这样是不行的。由于您在输入方法后立即将 TaskCancellation
显式 设置为 true
,因此您不需要测试 属性 本身。它当然会起作用。如果 TaskCancellation
的值是一个操作的结果,您将单独测试这个操作。如果 TaskCancellation
的值是条件的结果,您将单独测试该条件。要测试您的示例代码,您首先要在命令执行后断言 TokenSource.IsCancellationRequested
是 true
。然后写第二个测试用例来测试CommandCompletedControlsSetup()
.