nunit - 使用 NUnit,(如何)我可以测试设置 Thread.CurrentThread.Name 的代码吗?
问题描述
考虑这个测试
[TestFixture]
class Sample
{
[Test]
public void Test()
{
Thread.CurrentThread.Name = "Foo";
}
}
如果我debug
这个测试,它通过没有错误。
如果我run
进行此测试,则会失败并出现以下异常
System.InvalidOperationException :此属性已设置且无法修改。
在运行模式下,测试线程的名称是“NonParallelWorker”。
在调试模式下,测试线程的名称是null
作为约束,假设不允许更改被测代码,并尝试设置线程的名称,而不先检查是否为空。
例如
public void SampleMethodUnderTest()
{
// It is important that this method gets to set this field.
Thread.CurrentThread.Name = "Important Value";
}
我对文档和其他帖子的搜索已经枯竭......
问题
有什么方法可以禁用/修改 NUnit 的线程命名行为?
解决方案
尝试添加RequiresThreadAttribute
.
[TestFixture]
class Sample
{
[Test, RequiresThread]
public void Test()
{
Thread.CurrentThread.Name = "Foo";
}
}
我认为这目前可以工作,尽管这会创建一个未命名的线程这一事实可能是一个实现细节,而不是一定会可靠地向前工作的东西,我不确定。当然,另一种选择是在测试中创建自己的用户控制线程,并将任何异常传递回 NUnit。
推荐阅读
- ios - UITableViewCell 颜色在我在他的班级中设置后不会保持不变
- css - 如何更改 Bootstrap 4 中的渐变设置?
- python - type object 'Event' has no attribute '_default_manager'
- sql - QlikView/SQL - 带有 IsNull 的 If 语句
- javascript - 试图在JS画布中获取点与鼠标之间的距离
- sql - How to read data from multiple XML files in SQL Server?
- ios - 基于数组比较更新 UICollectionView
- python - Facebook sdk python在没有登录的情况下输出访问令牌?
- vba - 是否为空返回“”
- python - 可视化 CNN 过滤器时,元组索引超出范围