The*_*ean 66 .net c# nunit unit-testing thread-safety
我写了一个类和许多单元测试,但我没有让它线程安全.现在,我想让类线程安全,但为了证明它并使用TDD,我想在开始重构之前编写一些失败的单元测试.
有什么好办法吗?
我的第一个想法是创建一些线程并让它们以不安全的方式使用该类.用足够的线程做足够的时间,我一定会看到它破裂.
Max*_*kin 10
问题在于,大多数多线程问题,如竞争条件,本质上都是不确定的.它们可以依赖于您无法模拟或触发的硬件行为.
这意味着,即使您使用多个线程进行测试,如果您的代码中存在缺陷,它们也不会始终失败.
请注意,Dror的答案没有明确说明这一点,但至少Chess(可能还有Racer)通过在所有可能的交错中运行一组线程来获得可重现的错误.他们不只是运行线程一段时间,希望如果有错误,它将发生巧合.
例如,Chess将遍历所有交错,然后为您提供一个标记字符串,表示发现死锁的交错,以便您可以使用从死锁视角感兴趣的特定交错来归因您的测试.
我不知道这个工具的确切内部工作方式,以及它如何将这些标记字符串映射回您可能正在修改以修复死锁的代码,但是您有它...我实际上真的很期待这个工具(和Pex)成为VS IDE的一部分.
| 归档时间: |
|
| 查看次数: |
10323 次 |
| 最近记录: |