c# - 如何测试取消 TokenSource 的方法?
问题描述
我对取消 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
before 再次更改为false
after ?CommandCompletedControlsSetup
还是我的架构有问题?我应该在测试方法中创建一些任务并以某种方式附加 SUT 令牌吗?
解决方案
这种方式是不可能的。由于您在输入方法后TaskCancellation
明确设置为true
正确,因此您无需测试属性本身。它当然会起作用。如果 的值TaskCancellation
是操作的结果,您将单独测试此操作。如果 的值TaskCancellation
是某个条件的结果,您将单独测试该条件。要测试您的示例代码,您首先在命令执行后断言TokenSource.IsCancellationRequested
is 。true
然后编写第二个测试用例进行测试CommandCompletedControlsSetup()
。
推荐阅读
- facebook - 无法通过 Facebook Conversion API 接收测试事件
- python - 为什么这个while循环没有在我的python代码中执行
- java - 想要使用带有图像作为输入和输出参数的 blob 压缩 jpeg
- angular - Angular 8 FCM 推送通知不起作用
- mysql - 从 MySQL 查询中获取反向匹配列表
- python - 带有强制关键字参数的自定义类的 Python 枚举
- java - 处理 Java 程序上的扫描程序异常
- c++ - ::lock() 函数如何在 std::weak_ptr 上工作?
- google-apps-script - 实时获取 Google Form(Quiz) 分数
- c# - 使用 ASP.NET 通过 SQL 表显示存储在文本框中的数据