如何在Spring的Junit测试中使用来自服务器(如ManagedExecutorService)的注入资源

如何在Spring的Junit测试中使用来自服务器(如ManagedExecutorService)的注入资源,spring,concurrency,junit,wildfly,Spring,Concurrency,Junit,Wildfly,我在代码中使用ManagedExecutorService实现并发性,如下所示: @Resource private ManagedExecutorService defaultManagedExecutorService; import static org.mockito.BDDMockito.*; .... ManagedExecutorService mes = mock(ManagedExecutorService.class); ExpectedLookupTemplate jn

我在代码中使用ManagedExecutorService实现并发性,如下所示:

 @Resource
private ManagedExecutorService defaultManagedExecutorService;
import static org.mockito.BDDMockito.*;
....
ManagedExecutorService mes = mock(ManagedExecutorService.class);
ExpectedLookupTemplate jndiTemplate = new ExpectedLookupTemplate();
jndiTemplate.addObject("java:jboss/ee/concurrency/executor/default", mes);
...
如果我构建它们并将它们部署到服务器上,则可以正常工作,因为我引用了服务器上的ResourceManagedExecutorService:

<managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" core-threads="5" max-threads="25" keepalive-time="5000"/>
似乎spring无法从服务器上找到我的资源

我现在能做什么

谢谢大家!

您需要“模拟”该功能,这意味着模拟一个类似的实现的真实交易,该实现实际上并不去服务器检索JNDI资源,而是使用一个虚假的结果

Spring中有一个包提供了一些测试JNDI资源的功能,您可以找到它的源代码

为了开始使用该包中的类,我将查看Spring自己的测试类,其中使用了这些JNDI模拟类。例如,查看如何使用这些类来测试JTA事务管理器

我还没有用过这个,但我会尝试这样的方法:

 @Resource
private ManagedExecutorService defaultManagedExecutorService;
import static org.mockito.BDDMockito.*;
....
ManagedExecutorService mes = mock(ManagedExecutorService.class);
ExpectedLookupTemplate jndiTemplate = new ExpectedLookupTemplate();
jndiTemplate.addObject("java:jboss/ee/concurrency/executor/default", mes);
...
或者,您可以查看另一个需要模拟
ManagedExecutorService
的测试类