我正在编写一些方法来操纵SSLContext。我写了JUnit-Test来测试功能。不幸的是,我被困住了,因为我找不到重置SSLContext的方法。因此,我必须在自己的JVM中自行运行每个测试,因为上一个测试的影响会影响下一个测试。 SSLContext接缝不可重置,因为它不是以DI方式编写的。
有没有一种方法可以重置SSLContext?
有没有办法在自己的JVM中运行每个JUnit-Test? (我使用Maven作为构建管理工具)
这将不起作用这将仅部分起作用:
SSLContext defaultSSLContext = SSLContext.getDefault();
// manipulate SSLContext
SSLContext.setDefault(defaultSSLContext);
编辑2017-02-02
我的Java安装已损坏
我的Java安装已中断,因此在我的情况下,默认SSLContext为空
(null == SSLContext.getDefault())
。因此,我无法设置SSLContext。该方法引发NullPointerException。我重新安装了Java,现在SSLContext可以再次使用,并且默认SSLContext不会为null。重置SSLContext
将SSLContext存储在临时变量中,然后将其还原将适用于SSLContext。但不适用于java.net.URL之类的实现。这些实现接缝是在第一次调用时保持SSLContext的Singleton实例,并且永远不会在JVM运行时更改它。
JUnit分叉与Maven一起运行
我遵循了Stefan Birkner的建议,并使用了Maven Surefire插件。
我在项目pom.xml中添加了:
</plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<reuseForks>false</reuseForks>
<forkCount>2</forkCount>
</configuration>
</plugin>
</plugins>
我将JUnit测试分为几个部分,这些部分可以独立运行而不会产生干扰。因此
FooTest.java
成为Foo01Test.java ... Foo03Test.java
。现在,这些测试正在Eclipse内和Maven中运行。 最佳答案
Maven Surefire插件允许您指定每个测试使用新的JVM:https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html
关于java - Java JUnit:在JUnit测试中重置SSLContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41913021/