Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对一个简单地用jUnit启动线程的方法进行单元测试?_Java_Multithreading_Unit Testing_Testing_Junit - Fatal编程技术网

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如何?你有一个例子吗?