Java 如何对一个简单地用jUnit启动线程的方法进行单元测试?
正如标题中所述,我想测试如下方法:Java 如何对一个简单地用jUnit启动线程的方法进行单元测试?,java,multithreading,unit-testing,testing,junit,Java,Multithreading,Unit Testing,Testing,Junit,正如标题中所述,我想测试如下方法: public void startThread() { new Thread() { public void run() { myLongProcess(); } }.start(); } 编辑: 根据评论判断,我想测试线程是否启动并不常见。所以我必须调整这个问题。。。如果我的要求是100%的代码覆盖率,我是否需要测试该线程是否启动?如果是这样的话,我真的需要一个
public void startThread()
{
new Thread()
{
public void run()
{
myLongProcess();
}
}.start();
}
编辑:
根据评论判断,我想测试线程是否启动并不常见。所以我必须调整这个问题。。。如果我的要求是100%的代码覆盖率,我是否需要测试该线程是否启动?如果是这样的话,我真的需要一个外部框架吗?这可以用它优雅地完成。假设类名为
ThreadLauncher
,则可以确保startThread()
方法导致调用myLongProcess()
:
public void testStart() throws Exception {
// creates a decorator spying on the method calls of the real instance
ThreadLauncher launcher = Mockito.spy(new ThreadLauncher());
launcher.startThread();
Thread.sleep(500);
// verifies the myLongProcess() method was called
Mockito.verify(launcher).myLongProcess();
}
如果需要100%的覆盖率,则需要调用
startThread
,这将启动一个线程。我建议进行某种验证,确认线程已启动(通过验证<代码> MyLangPurty/Cuth>中的某件事情正在发生,然后清理线程。然后,您可以通过直接从单元测试中调用该方法来完成对<代码> MyLangPurty/Cuth>的其余测试。这里,我认为这是有用的:我在这里发布了我的解决方案:我会考虑嘲弄或监视类。在测试下,这是一种错误的做法。相反,请验证myLongProcess
的功能。它必须做些什么,验证它。如果它调用其他类,请模拟该类以验证调用。我对这个问题的理解是,他想测试startThread()
方法执行启动线程的任务。他没有问如何测试myLongProcess()
的结果,我假设他已经知道如何进行测试。如果目标是100%覆盖率,则必须执行startThread()
方法。您可以按照我的建议,或者通过检查myLongProcess()的执行结果来执行此操作
如果您不想在项目中导入Mockito。困难在于要等到方法完成后才能检查结果。线程。睡眠
可能会导致套件中的其他测试出现问题并失败unexplicably@AmitDash如何?你有一个例子吗?