【问题标题】:How to create a Spring Boot test that runs with specific JVM arguments如何创建使用特定 JVM 参数运行的 Spring Boot 测试
【发布时间】:2020-03-11 14:02:51
【问题描述】:

我想为我的 Spring Boot 应用程序创建一个使用特定 JVM 参数的测试,我希望 JVM 参数仅用于此测试。

这可能吗?我的目标是只为一个测试设置代理,所以如果有其他方法可以实现,请提出建议。

【问题讨论】:

  • 您考虑过@BeforeClass 还是@Before?在这些中,您可以使用System.setProperty(...) 设置属性。
  • 感谢您的建议,我使用了System.setProperty(...),但使用了静态块。

标签: java spring spring-boot testing jvm


【解决方案1】:

我通过在类中添加一个静态块并设置系统属性解决了这个问题:

static {
    System.setProperty("http.proxyHost", "myproxyserver.com");
    System.setProperty("http.proxyPort", "80");
    System.setProperty("https.proxyHost", "myproxyserver.com");
    System.setProperty("https.proxyPort", "80");
}

【讨论】:

  • 好吧,我建议 @Before/@BeforeClass 因为你应该在测试后使用 @After/@AfterClass 取消设置它...使用静态块你为所有测试设置它我会说...
  • 是的,我尝试使用 @Before 注释并没有改变任何内容,@BeforeClass 注释也会导致错误(我不确定为什么)。使用静态块对我来说是一个很好的解决方案,因为测试类只有一个测试,此外,@Before 在每个测试之前运行,所以没有区别。
  • 很可能它没有工作,因为需要它的组件(它是 HttpClient 吗?)是在你设置之前创建的(我的意思是可能上下文已经初始化并且正在使用该设置的 bean)它。如果您现在有新的测试,它不想使用设置,那是不可能的......
  • 我不知道是否有解决方案(影响所有测试的设置),但就像我说的,因为我将它用于包含一个测试的类,这很好。也许我应该在答案中提到它,因为问题是关于一个测试的设置,而不是一个测试套件。
  • 我尝试在@SpringBootTest(properties={...}) 中设置属性,但效果不佳。上面的解决方案如何工作得很好!
【解决方案2】:

如果您使用 IntelliJ Idea,您可以从运行/调试配置 -> 虚拟机选项传递参数进行测试。 如果您使用的是 Maven,则可以在surefire-plugin 配置中传递参数:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1G</argLine>
            </configuration>
        </plugin>

请记住,Maven 选项会覆盖 Idea 默认值(如果已设置)。

【讨论】:

  • 感谢您的回答,但是,我正在寻找一种方法,让 JVM 参数只需要一个特定的测试。我认为这会将参数添加到多个测试中。
  • 您可以在 Idea 运行/调试配置中指定准确的 Junit 测试名称,请参阅jetbrains.com/help/idea/…
  • 用 maven 构建项目时运行测试的时候呢?我希望这不仅适用于 IntelliJ 的本地测试。抱歉,我在上次评论中忘记提及这一点。
猜你喜欢
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2020-07-28
  • 1970-01-01
  • 2021-06-10
  • 2017-10-27
相关资源
最近更新 更多