我正在编写一些方法来操纵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/

10-11 20:30