我想知道是否有人提出了测试多线程应用程序的良好策略。
我经常使用Midje进行测试,它非常适合测试函数...但是我不太确定如何在不让代码看起来很糟糕的情况下测试多线程代码:
(fact "the state is modified by a thread call"
(Thread/sleep 100)
(check-state-eq *state* nil)
(Thread/sleep 100)
(modify-state-thread-call *state* :updated-value)
(Thread/sleep 100)
(check-state-eq *state* :updated-value))
有时由于编译时间太长,我的测试会失败,因为状态没有及时更新,所以我必须要等待更长的时间。理想情况下,我希望有一种方法来编写像这样的内容:
(fact "the state is modified by a thread call"
(modify-state-thread-call *state* :updated-value)
=leads-to=> (check-state-eq *state* :updated-value))
并且远离睡眠。有什么策略可以做到这一点吗?