d11*_*wtq 8 cocoa multithreading unit-testing objective-c
在使用我的应用程序时,我偶然发现了一些代码中的竞争条件,这些代码使用在NSOperationQueue
用户触发的事件之后异步运行任务.我知道如何修复竞争条件,因为这是一个愚蠢的设计错误,我不会深入研究,但我想用测试用例来证明这个错误(这样在进一步优化/重构时它就不会回来了)下线).这让我很难过.如何测试多线程的东西,特别是当测试的目的是产生竞争条件时?
在处理线程和单元测试时,有没有人可以参考我可以参考的参考资料?我对种族条件的产生特别感兴趣.
您必须确保导致竞争条件的事件序列在测试期间实际出现。为此,您需要影响测试用例内的线程交错。
您可以通过额外的(条件)同步或(更简单且不太可靠)额外的计时器来实现这一点。将一些 sleep() 调用放入关键部分,以确保它们运行足够长的时间,以便其他线程到达不希望的状态。当您完成该工作后,用显式同步替换睡眠调用(即阻塞一个线程,直到另一个线程实际确认已到达)。
然后使这一切都以测试用例设置的全局标志为条件。