1

spring ThreadPoolTask​​Executor用于在我们的应用程序中进行并发处理。成功完成所有工作后,将调用摊牌方法。此实现工作正常,执行 junit 时出现问题。

我已经使用SpringJUnit4ClassRunner为这个类编写了多个测试用例。第一个测试用例将完美运行并关闭 ThreadPoolTask​​Executor。但是当第二个测试用例尝试提交任务时,会引发以下异常

org.springframework.core.task.TaskRejectedException: Executor [java.util.concurrent.ThreadPoolExecutor@16cefa8] did not accept task: com.sample.SampleJob@ea3cdf
    ....
aused by: java.util.concurrent.RejectedExecutionException
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)

根据我的分析,抛出异常是因为我试图在关闭时将任务提交给 ThreadPoolExecutor。

任何人都可以帮助我解决这个问题吗?

4

2 回答 2

1

不确定何时关闭执行程序,但我认为不应在每个测试用例之后调用关闭,但应该在所有测试用例结束时调用它。您可以使用以下方法:

@AfterClass
public void tearDown(){
 //shutdown your executor
}

希望能帮助到你 :)

于 2013-12-03T14:56:09.983 回答
0

请注意,SpringJUnit4ClassRunner默认情况下,在执行每个测试方法后不会重新创建应用程序上下文。

这意味着如果您Executor在上下文中声明并且您在执行测试方法后关闭,您将无法在其他测试方法中使用它。

您可以使用注释您的测试方法@DirtiesContextSpringJUnit4ClassRunner重新创建上下文。

于 2012-11-07T12:37:29.197 回答