我很好奇是否有人提出了测试多线程应用程序的好策略。
我用 midje 做了很多测试,这对于测试功能非常有用......但我不确定如何测试多线程代码而不让它看起来真的很hacky:
(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))
并远离睡眠。有没有策略来做到这一点?