【问题标题】:Configure two ports for springboot integration testing为spring boot集成测试配置两个端口
【发布时间】:2019-07-11 18:27:10
【问题描述】:

我对 Spring 框架和运行在 http://localhost:8080 的我的 JAVA 应用程序(比如 Project_A)非常陌生,它会处理并将处理后的内容转发到另一个应用程序(比如 Project_B)正在运行的 http://localhost:9090。 Project_B 回复 Project_A,然后 Project_A 将内容转发到外部。

我现在正在尝试为 Project_A 编写集成测试,因此需要两个模拟,一个在请求端,另一个在 Project_B 端。对于请求,我可以利用 MockMVC 来模拟请求和发送。但是为了模拟 Project_B,我正在考虑创建一个模拟控制器,它接收来自 Project_A 的请求并相应地发送回复。因此,为此,我需要创建另一个在不同端口中运行的控制器。 project_A 中的默认端口是 8080,在我的新控制器模拟中我需要使用 9090。

有没有办法在一个 spring junit 应用程序中使用两个不同的端口?或者有什么更好的方式通过弹簧单元测试本身来实现它?

【问题讨论】:

  • 您是要进行模拟测试还是实际集成测试? Project_A 和 Project_B 通过其他方式进行通信?
  • 是的 project_A 和 Project_B 是完全不同的实体,它们通过 REST 进行通信。
  • 我的第一个问题呢:你是在做模拟测试用例还是实际集成测试用例?
  • 实际集成测试。我遵循了这个spring.io/guides/gs/testing-web 并生成了向我的控制器发送请求的测试用例。但是对于另一端 Project_B ,我不确定在这种情况下如何处理。
  • 您已经通过 REST 将 Project_A 与 Project_B 通信。然后您可以创建 TestRestTemplate 对象并向 Project_B 发送请求并验证响应。

标签: spring spring-boot spring-mvc integration-testing spring-test-mvc


【解决方案1】:

我一般在application.properties中使用这个

management.port=${second_Port}

【讨论】:

    【解决方案2】:

    您可以在 application-test.properties 中使用server.port=9090。在你的测试课中你可以像这样选择它

    @TestPropertySource(value = { "classpath:application-test.properties" })
    

    您还需要在 application.properties 文件中定义 server.port 来代替实际端口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2021-01-24
      • 2019-02-25
      • 2021-02-16
      • 2020-02-25
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多