如何确保在 JUnit 测试用例中,由被测方法直接/间接生成的所有线程都已完成该作业,以便我可以断言最终结果?
@Test
public void testMethod() {
Result result=method();// may spawn multiple threads to set result.value
Assert.assertTrue(result.getValue()==4); //should execute only after result.value is set to its final value.
}
真正的问题是,如何在非测试代码中处理这种情况? API有什么作用method()
向调用者保证何时result.value
将被设置?
在编写测试时请牢记这一点 - 目的是断言类及其方法的行为如其所宣传的那样。有时,弄清楚广告中的界面是什么可能是挑战的一半。
在这种情况下,我强烈建议您Result
对象的行为就像Future
,因为它的get()
方法会阻塞,直到结果可用。 (或者,给它一个waitFor()
方法或类似方法)。
如果您的方法没有提供任何特定的保证或阻止调用,您可以really测试中要做的就是不断检查该值x循环几秒钟,放置一个@Timeout
进行测试以确保该值在“合理”时间内设置。但这也是客户端所能做的,所以
- 这是一个非常有效的测试;
- 它强调了该界面对于客户来说不太有用,修改它将是一个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)