Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在集成测试中启动两个spring启动应用程序_Java_Spring Boot_Junit_Server_Port - Fatal编程技术网

Java 在集成测试中启动两个spring启动应用程序

Java 在集成测试中启动两个spring启动应用程序,java,spring-boot,junit,server,port,Java,Spring Boot,Junit,Server,Port,我有一个spring boot集成测试。目前,它通过位于src/test/resources中的我的测试服务器应用程序(MockServerApp.java)在测试上运行 我还想在集成测试启动之前启动我的spring boot应用程序(app.java),这样它就可以连接并执行我将添加到集成测试中的soap调用,而不是手动运行主应用程序服务器然后启动集成测试 我的MockServerApp已配置为端口9119。 我的应用程序(主应用程序)配置为端口28433。 它们都在本地主机上运行 起初,我尝

我有一个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(){


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

我的测试属性

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
我的app.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.port进行了修改之后,我意识到集成测试仍在使用MockServerApp运行,尽管我的spring引导测试指向主应用程序类。我尝试过使用属性源,但不起作用


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

根据您的情况,以下两条建议可能会有所帮助:

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

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


  • 谢谢,这些都是很好的建议,但我还是坚持把它变成一个多模块的项目