Java JUnit:在JUnit测试中重置SSLContext



我正在编写一些方法来操作SSLContext。我编写了JUnit测试来测试功能。不幸的是,我被卡住了,因为我找不到重置SSLContext的方法。所以我必须在它自己的JVM中运行每个测试,因为上一个测试的影响将影响下一个测试。SSLContext接缝不可重新设置,因为它不是以DI方式编写的。

有没有办法重置SSLContext?

有没有一种方法可以在自己的JVM中运行每个JUnit测试?(我使用Maven作为构建管理工具)

这不会起作用这只会部分起作用:

SSLContext defaultSSLContext = SSLContext.getDefault();
// manipulate SSLContext
SSLContext.setDefault(defaultSSLContext);

编辑2017-02-02

我的Java安装已损坏

我的Java安装被破坏了,所以在我的情况下,默认的SSLContext是null(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

最新更新