在使用我的应用程序时,我在一些代码中偶然发现了一个竞态条件,它使用NSOperationQueue在用户触发的事件之后异步运行任务。我知道如何修复竞争条件,因为这是一个愚蠢的设计错误,我不会深入研究,但我想用一个测试用例来证明这个错误(这样它在优化/重构过程中就不会再出现)。这把我难倒了。如何测试多线程的东西,特别是当测试的目的是生成竞争条件时?
当涉及到线程和单元测试时,有没有人有我可以参考的参考资料链接?我对竞态条件生成特别感兴趣。
发布于 2010-12-14 11:18:40
您必须确保导致竞争条件的事件序列在测试过程中实际出现。为此,您需要影响测试用例中的线程交错。
您可以通过附加(有条件的)同步或(更简单且不太可靠的)附加计时器来实现这一点。将一些sleep()调用放入临界区,以确保它们运行足够长的时间,以便其他线程到达不需要的状态。当你让它工作时,用显式同步替换休眠调用(即阻塞一个线程,直到另一个线程实际确认已经到达)。
然后,这一切都以测试用例设置的全局标志为条件。
https://stackoverflow.com/questions/4435545
复制相似问题