对于如何为可能易受死锁和竞争条件影响的代码编写可重复的单元测试,有什么建议吗?
现在,我倾向于跳过单元测试,专注于压力测试。这样做的问题是,您可以运行5次压力测试,并看到5种不同的结果。
编辑:我知道这可能只是一个梦,但如果有一种方法可以控制单独的线程,使它们一次执行一条指令,那么我可能会有所收获。
发布于 2008-10-06 23:24:15
看看TypeMock赛车(测试版)
编辑:实际的Alpha
http://www.typemock.com/Typemock_software_development_tools.html
发布于 2008-10-06 23:27:40
通常可以通过使用诸如ManualResetEvent之类的东西来强制执行可预见的争用条件和死锁,以便在释放线程之前将每个线程置于预期状态--即让线程A拥有锁并等待信号……让线程B请求锁,等等。
然而,您通常可能会编写这样的测试来调查可疑的bug,以证明它何时被修复,以及它不会重新浮出水面。您通常会围绕竞争条件进行设计(但要尽可能实际地对其进行测试)。
发布于 2008-10-06 23:31:40
我不认为寻找竞争条件真的属于单元测试的范畴。或多或少根据定义,测试竞争条件的唯一方法是伪随机。除非您愿意努力正式证明锁定策略的正确性,否则必须进行一些压力测试。
您仍然需要编写单元测试,以验证算法的正确性,而不是锁定策略。
在对多线程代码进行压力测试时,您需要在以下条件下进行测试:每个线程有一个CPU,多个线程共享CPU,CPU比线程多(如果可能)。
https://stackoverflow.com/questions/176636
复制相似问题