gpt4 book ai didi

java - 如何在 spring boot 应用程序中每次 JUnit 测试后释放端口号?

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

我有一个用 spring boot 编写的 JUnit 测试类,其中包含 3 个单元测试:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@ContextConfiguration
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class AppclaitionTest {

@BeforeClass
public static void initialize(){
System.out.println(">>>>>>>Intialization Part!");
}

@Test
public void test1(){
System.out.println(">>>>>>>Appcliation Test Started! - Test 1");
Application.main(new String[]{});
System.out.println(">>>>>>>Appcliation Test Ended! - Test 1");
}

@Test
public void test2(){
System.out.println(">>>>>>>Appcliation Test Started! - Test 2");
Application.main(new String[]{});
System.out.println(">>>>>>>Appcliation Test Ended! - Test 2");
}

@Test
public void test3(){
System.out.println(">>>>>>>Appcliation Test Started! - Test 3");
Application.main(new String[]{});
System.out.println(">>>>>>>Appcliation Test Ended! - Test 3");
}

@AfterClass
public static void destory(){
System.out.println(">>>>>>>Destroy Part!");
}
}

如果在第一次测试后运行,我将低于异常:

java.net.BindException: Address already in use: bind

虽然应用程序上下文已释放,但它并未释放端口号,因此出现上述异常。

有什么办法可以在每次单元测试前关闭端口号吗?

最佳答案

您应该考虑使用 SpringApplication 类启动您的 Spring Boot 应用程序,而不是直接调用您的 Spring Boot 应用程序的 main(String[] args) 方法'提供一个 API 来终止它。

通过 SpringApplication 方式,您可以获得一个 ConfigurableApplicationContext 实例,它提供了一种终止正在运行的应用程序的方法。

例如:

ConfigurableApplicationContext context;

@Before
public void setup{
SpringApplication springApplication = new SpringApplicationBuilder()
.sources(Application.class)
.build();
context = springApplication.run();
}

@After
public void tearDown(){
SpringApplication.exit(context);
}

@Test
public void test1(){
// action
...
// assertion
...
}

但是,您应该谨慎对待这种做法。
启动 Spring Boot 应用程序是一个相对昂贵的操作。
为任何测试方法执行它都会使测试执行速度变慢。
单元测试应该很快。
在集成机器上执行的集成测试可能会比较慢。
你也应该考虑这个问题。

关于java - 如何在 spring boot 应用程序中每次 JUnit 测试后释放端口号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635820/

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