gpt4 book ai didi

java - 运行单元测试时 RmiRegistry 创建多次

转载 作者:行者123 更新时间:2023-11-30 05:51:35 33 4
gpt4 key购买 nike

我的 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: Error creating bean with name 'rmiRegistry' defined in class path resource [uk/ac/prospects/hedd/api/config/JmxRmiConfig.class]: Invocation of init method failed; nested exception is java.rmi.server.ExportException: internal error: ObjID already in use

它似乎正在为第二个类重新创建 RmiRegistry,而不破坏第一个类。

由于我还有其他没有 @AutoConfigureMockMvc 的测试可以一起正常运行,因此我的假设是 @AutoConfigureMockMvc 触发了问题。

如何让两个测试一起运行?

最佳答案

surefire 插件的以下附加配置为我们解决了这个问题。

                <forkCount>1</forkCount>
<reuseForks>false</reuseForks>

不能 100% 理解问题,但我们添加了上述内容,因为测试套件在一个测试中模拟但在另一测试中正确配置的 Spring bean 之间变得困惑。这也解决了 RMI bean 问题。我认为这为每个测试提供了一个干净的 Spring 上下文。

关于java - 运行单元测试时 RmiRegistry 创建多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53815303/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com