Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 for future.get()异常场景_Java_Multithreading_Junit4 - Fatal编程技术网

Java JUnit for future.get()异常场景

Java JUnit for future.get()异常场景,java,multithreading,junit4,Java,Multithreading,Junit4,我需要测试InterruptedException和ExecutionException并为它们编写JUnits 请给我一些建议。如何中断线程以复制场景。populateDataForm将启动新线程并将其添加到未来列表中 以下是我的示例代码: classmytest{ 公共人口数据(){ 收藏>(); 数据集ds=Helper.populateDataForm(员工、期货); waitForTaskCompletion(期货); } 私人waitForTaskCompletion(期货){ fo

我需要测试
InterruptedException
ExecutionException
并为它们编写JUnits

请给我一些建议。如何中断线程以复制场景。
populateDataForm
将启动新线程并将其添加到未来列表中

以下是我的示例代码:

classmytest{
公共人口数据(){
收藏>();
数据集ds=Helper.populateDataForm(员工、期货);
waitForTaskCompletion(期货);
}
私人waitForTaskCompletion(期货){
for(未来:未来){
试一试{
future.get();
}捕捉(中断异常e){
抛出新的CustomException(“Message1”,e)
}捕获(执行例外){
抛出新的CustomException(“Message2”,e)
}
}
}

您可以从
MyTest
继承并重载
populateData()
方法,如下所示:

public void populateData(){
ExecutorService ExecutorService=Executors.newSingleThreadExecutor();
Callable calls=new Callable(){
@凌驾
公共字符串调用()引发异常{
对于(;;){
睡眠(100);
//在这里调用interrupt,这会导致Future.get()中断
Thread.currentThread().interrupt();
如果(1>2)断裂;
}
返回null;
}
};
最终未来=executorService.submit(调用);
waitForTaskCompletion(未来);
executorService.shutdown();
}
测试
ExecutionException
抛出
RuntimeException
而不是中断,如下所示:

if(1==1)抛出新的RuntimeException();

感谢Sqeezer的建议。它在生成ExecutionException场景方面非常有效,但在使用@Rule编写JUnit时,我无法获得与InterruptedException相同的异常消息。对于使用@Rule测试InterruptedException场景,我们需要中断运行populateData()的线程因此,在从测试类调用populateData()方法之后,我用thread.currentThread().interrupt()中断了正在运行的线程。因为运行TestMethod的同一个线程正在运行populateData()方法,中断这个线程就够了。