gpt4 book ai didi

java - 在集成测试中启动两个 spring boot 应用程序

转载 作者:行者123 更新时间:2023-11-30 10:01:16 25 4
gpt4 key购买 nike

我有一个 spring boot 集成测试。目前它正在通过位于 src/test/resources 中的测试服务器应用程序 (MockServerApp.java) 进行测试。

我还想在启动集成测试之前启动我的 spring boot 应用程序 (App.java),这样它就可以连接并执行我将添加到集成测试中的 soap 调用,而不是手动运行主应用程序服务器,然后启动我的集成测试

我的 MockServerApp 配置为端口 9119。我的应用程序(主应用程序)配置为端口 28433。它们都在本地主机上运行。

起初我尝试使用 SpringBootTest 同时运行两个应用程序

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,classes = {App.class,MockServerApp.class
})
public class BillingMediatorIT {

@Test
public void testOne(){


}
}

但这只会在端口 9119 上启动模拟服务器。

然后我尝试在这样的集成测试之前启动它

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,classes = {App.class,MockServerApp.class
})
public class BillingMediatorIT {


static ConfigurableApplicationContext context;
@BeforeClass
static public void setup(){
SpringApplication springApplication = new SpringApplicationBuilder()
.sources(App.class)
.build();
context = springApplication.run();
}
@Test
public void testOne(){


}
}

这给了我一个错误,虽然说地址已经在使用中。

我的测试.properties

server.ssl.enabled=false
logging.config=classpath:logback-spring.xml
logging.file=messages
logging.file.max-size=50MB
logging.level.com.nulogix=DEBUG
billing.engine.address=127.0.0.1
billing.engine.port=9119
billing.engine.api.version=0.97
billing.engine.core.version=0.97
billing.engine.core.name=Patient_Responsibility

我的应用程序属性

server.port=28433
server.ssl.enabled=true
server.ssl.key-store=/Users/asluborski/Documents/mock.jks
server.ssl.key-store-password=Nul0gix
logging.config=classpath:logback-spring.xml
logging.file=messages
logging.file.max-size=50MB
logging.level.com.nulogix=DEBUG
billing.engine.address=127.0.0.1
billing.engine.port=9119
billing.engine.api.version=0.97
billing.engine.core.version=0.97
billing.engine.core.name=Patient_Responsibility

因此,在尝试并更改两个属性文件中的 server.ports 之后,我意识到集成测试仍在使用我的 MockServerApp 运行,尽管我的 spring boot 测试是针对主应用程序类的。我试过使用 property source 但它没有用。

我应该补充一点,我在 src/test/resources 和 src/main/resources 中的属性都被命名为 application.properties。我不确定这是否会导致冲突,但我只是从 main 复制了属性,然后更改了文件中的 server.port。我不确定如何更改 .properties 的名称。

最佳答案

根据您的情况,这里有两个可能会有所帮助的建议:

  1. 如果您只需要一个 Controller 来与之通信,那么只需在您的测试目录中设置一个(即与其他测试相同的位置)并编写与该 Controller 通信的测试。您使用 SpringRunner/SpringBootTest 将打开此 Controller ,就好像它是用于测试目的的主应用程序的一部分。请注意,它将与您的主应用程序在同一端口上运行,因此请确保它具有不同的端点以避免任何冲突。

  2. 如果您的 Mocked Server 更复杂,您的端点配置是一个问题,或者您觉得您可能会在将来为这些测试添加多个服务连接(想想 nginx 服务器、数据库、消息传递等) , 那么我建议查看 Testcontainers .这允许您在 docker 容器中使用图像,您可以连接到这些容器作为集成测试中的资源。

关于java - 在集成测试中启动两个 spring boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57529604/

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