如何使JUnit的行为与从命令行运行的Java相同

如何使JUnit的行为与从命令行运行的Java相同,java,junit,junit4,Java,Junit,Junit4,我注意到,当单元测试退出时,生成的所有线程都会自动终止,这与从命令行运行的java程序有很大不同。在命令行中,直到所有非deamon线程退出,程序才会退出 如何使用jUnit测试包含派生线程的案例?如果您正在测试的方法返回对它创建的线程的引用,那么就加入该方法。如果没有,请创建您自己的线程来调用测试中的方法并加入该方法。我建议您将单元测试shutdown()作为其组件,以便它返回到测试开始前的状态。这在运行的系统中可能并不需要,但它允许您多次运行多个测试 您甚至可能希望在开始时拍摄正在运行的线程

我注意到,当单元测试退出时,生成的所有线程都会自动终止,这与从命令行运行的java程序有很大不同。在命令行中,直到所有非deamon线程退出,程序才会退出


如何使用jUnit测试包含派生线程的案例?

如果您正在测试的方法返回对它创建的线程的引用,那么就加入该方法。如果没有,请创建您自己的线程来调用测试中的方法并加入该方法。

我建议您将单元测试shutdown()作为其组件,以便它返回到测试开始前的状态。这在运行的系统中可能并不需要,但它允许您多次运行多个测试


您甚至可能希望在开始时拍摄正在运行的线程的快照,并在测试后检查是否没有新线程(可能有一些预期的线程可以)

因此,您有一个生成线程的测试用例,需要等待它完成以检查其结果?如果是这样的话,您不能使用join让测试用例等待线程完成吗?您是否可以重构代码,以便在不将功能放在单独线程中的情况下对其进行测试?我需要测试的方法会生成一个线程。如果您正在测试的方法返回一个对线程的引用是creates,则加入该线程。如果没有,请创建自己的线程来调用测试中的方法并加入其中。@Dave,谢谢。你能把这些评论添加到答案中吗?