假设我有一个方法SomeClass
的课程void process()
。这个方法的实现类似于new Thread(this::someOtherMethod).start
(需要在特定线程中仅执行someOtherMethod
)。
写下了这种方法的单元测试:
SomeClass class= new SomeClass(anObjectToWorkWith);
class.process();
assertEquals(expectedObj, anObjectToWorkWith)
我已经意识到,当process
方法在特定线程中执行时,assertEquals
方法在process
方法完成之前被调用。
因此,我有一个问题:是否有某种方法可以等待process
方法执行,以便在assertEquals
之后调用process
。
提前谢谢。
P.S。不建议使用Thread.sleep
方法的解决方案或暗示使SomeClass
实现Runnable
接口的解决方案,因为这些解决方案不符合任务。
答案 0 :(得分:1)
您只需硬即可在此处测试代码。
当您的测试代码创建一个新的线程实例并使用它时 - 那么只需没有编写合理的单元测试的好方法。
相反:考虑更改测试中的代码。
例如:不使用低级线程,而是转向ExecutorService。然后使用same thread executor进行测试。因为这允许您将多线程问题转变为单线程问题。只需使用不同类型的执行者。