c# - 线程安全的单元测试?

标签 c# .net unit-testing nunit thread-safety

我写了一个类和很多单元测试,但我没有让它成为线程安全的。现在,我想让类线程安全,但为了证明这一点并使用 TDD,我想在开始重构之前编写一些失败的单元测试。

有什么好的方法吗?

我的第一个想法是创建几个线程并让它们都以不安全的方式使用该类。使用足够多的线程执行足够多次,我一定会看到它中断。

最佳答案

有两种产品可以帮助您:

两者都检查代码中的死锁(通过单元测试),我认为 Chess 也会检查竞争条件。

使用这两种工具都很简单 - 您编写一个简单的单元测试并多次运行您的代码,并检查您的代码中是否可能出现死锁/竞争条件。

编辑: 谷歌发布了一个工具,可以在运行时(而不是在测试期间)检查竞争条件,称为 thread-race-test .
它不会找到所有的竞争条件,因为它只分析当前运行,而不是像上面的工具那样分析所有可能的场景,但它可能会帮助您在竞争条件发生后找到它。

更新: Typemock 站点不再有指向 Racer 的链接,并且在过去 4 年中没有更新。我猜项目已经结束了。

关于c# - 线程安全的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715822/

相关文章:

c# - DDD 中的 UI 层依赖

c# - 为什么 Enum.ToString() 不返回正确的枚举名称?

.NET 合并类库引用

java - 需要有关 EJB3 bean 类型与单元测试的建议

.net - 模拟文件系统

javascript - 单元测试 Angular 时 "angualar.module"和 "module"之间的区别

c# - LINQ 链接中的 Any() 运算符

C# - 每次向下循环 float

c# - LINQ to Nhibernate 重复连接

c# - 在网站上执行定时任务 - 最佳实践?