Java 如何创建使用特定JVM参数运行的Spring启动测试
我希望为我的spring boot应用程序创建一个使用特定JVM参数的测试,我希望JVM参数仅用于此测试Java 如何创建使用特定JVM参数运行的Spring启动测试,java,spring,spring-boot,testing,jvm,Java,Spring,Spring Boot,Testing,Jvm,我希望为我的spring boot应用程序创建一个使用特定JVM参数的测试,我希望JVM参数仅用于此测试 这可能吗?我的目标是只为一个测试设置一个代理,因此如果有其他方法可以实现这一点,请提出建议。如果您使用IntelliJ Idea,您可以通过运行/调试配置->虚拟机选项向测试传递参数。 如果您使用的是Maven,则可以在surefire插件配置中传递参数: org.apache.maven.plugins maven surefire插件 -Xmx1G 请记住,Maven选项会覆盖Ide
这可能吗?我的目标是只为一个测试设置一个代理,因此如果有其他方法可以实现这一点,请提出建议。如果您使用IntelliJ Idea,您可以通过运行/调试配置->虚拟机选项向测试传递参数。 如果您使用的是Maven,则可以在surefire插件配置中传递参数:
org.apache.maven.plugins
maven surefire插件
-Xmx1G
请记住,Maven选项会覆盖Idea默认值(如果已设置)。我通过在类中添加一个静态块并设置系统属性来解决这个问题:
static {
System.setProperty("http.proxyHost", "myproxyserver.com");
System.setProperty("http.proxyPort", "80");
System.setProperty("https.proxyHost", "myproxyserver.com");
System.setProperty("https.proxyPort", "80");
}
谢谢您的回答,但是,我正在寻找一种方法,使JVM参数只包含一个特定的测试。我认为这会将参数添加到多个测试中。您可以在Idea运行/调试配置中指定确切的Junit测试名称,请查看在使用maven构建项目时何时运行测试?我希望这不仅仅适用于IntelliJ的本地测试。对不起,我忘了在上次评论中提到这一点。你在之前考虑过<代码> @ Beoprass<代码>或代码> @吗?在这些中,您可以使用
System.setProperty(…)
设置属性。感谢您的建议,我使用了System.setProperty(…)
,但是使用了一个静态的bloc。好吧,我建议在@BeforeClass
/@BeforeClass
之前使用@AfterClass
之后使用@BeforeClass>来取消设置属性。。。使用静态块,您可以为所有测试设置它,我会说…是的,我尝试了@Before
注释,但它没有改变任何内容,而且@BeforeClass
注释会导致错误(我不确定原因)。使用静态块对我来说是一个很好的解决方案,因为测试类只有一个测试,此外,@Before
在每个测试之前运行,所以没有区别。很可能它不起作用,因为需要它的组件(是HttpClient吗?)已经创建(我的意思是可能上下文已经初始化,并且bean正在使用设置)在你设置它之前。如果您现在有一个新的测试,它不想使用设置,这是不可能的…我不知道是否有解决方案(设置会影响所有测试),但正如我所说的,因为我对一个包含一个测试的类使用它,这很好。也许我应该在回答中提到它,因为问题是关于一个测试的设置,而不是测试套件。我尝试在@SpringBootTest(properties={…})
中设置属性,但效果不好。上面的解决方案是如何工作的?干得好!