【发布时间】:2018-12-17 12:30:11
【问题描述】:
我的 Spring Boot 应用有一个 bean:
@Configuration
public class JmxRmiConfig {
@Value("${jmx.rmi.host:localhost}")
private String rmiHost;
@Value("${jmx.rmi.port:1099}")
private Integer rmiPort;
@Bean
public RmiRegistryFactoryBean rmiRegistry() {
final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();
rmiRegistryFactoryBean.setPort(rmiPort);
rmiRegistryFactoryBean.setAlwaysCreate(true);
return rmiRegistryFactoryBean;
}
@Bean
@DependsOn("rmiRegistry")
public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {
final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
connectorServerFactoryBean.setObjectName("connector:name=rmi");
connectorServerFactoryBean.setServiceUrl(String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));
return connectorServerFactoryBean;
}
}
我有两个单元测试都这样注释:
@AutoConfigureMockMvc
@SpringBootTest
@Unroll
class ... extends Specification { ... }
(Unroll 和 Specification 均来自 spock.lang)
当我使用 maven/surefire 一起运行它们时,第二个测试类失败,出现以下错误:
org.springframework.beans.factory.BeanCreationException: 错误 创建在类路径资源中定义的名称为“rmiRegistry”的bean [uk/ac/prospects/hedd/api/config/JmxRmiConfig.class]:调用 初始化方法失败;嵌套异常是 java.rmi.server.ExportException:内部错误:ObjID 已在使用中
它似乎正在为第二个类重新创建 RmiRegistry,而没有破坏第一个类。
由于我有其他没有@AutoConfigureMockMvc 的测试一起运行良好,我的假设是@AutoConfigureMockMvc 触发了问题。
如何让两个测试一起运行?
【问题讨论】:
-
我遇到了同样的问题,我发现没有提供任何解决方案。你有没有想过这个问题?
-
@EvanKairuz 是的,我们今天解决了这个问题,同时调查了作为一组测试运行时测试未通过的其他问题。看我的回答
标签: java unit-testing spring-boot rmi