Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit:在JUnit测试中重置SSLContext_Java_Ssl_Junit_Dependency Injection - Fatal编程技术网

Java JUnit:在JUnit测试中重置SSLContext

Java JUnit:在JUnit测试中重置SSLContext,java,ssl,junit,dependency-injection,Java,Ssl,Junit,Dependency Injection,我正在写一些方法来操纵SSLContext。我编写了JUnit测试来测试功能。不幸的是,我被卡住了,因为我找不到重置SSLContext的方法。所以我必须在它自己的JVM中运行每个测试,因为上一个测试的影响将影响下一个测试。SSLContext不能重置,因为它不是以DI方式写入的 有没有办法重置SSLContext 有没有办法在自己的JVM中运行每个JUnit测试?(我使用Maven作为构建管理工具) 这是行不通的这只会部分起作用: SSLContext defaultSSLContext =

我正在写一些方法来操纵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的单例实例,并且在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>

[...]
org.apache.maven.plugins
maven surefire插件
2.19.1
假的
2.

我将JUnit测试分为多个部分,这些部分可以独立运行而不受干扰。所以
FooTest.java
变成了
Foo01Test.java。。。java
。现在,测试在Eclipse中运行,并与Maven一起运行。

Maven Surefire插件允许您为每个测试指定一个新的JVM:

Maven Surefire插件允许您为每个测试指定一个新的JVM:

在编写单元测试时,您应该模拟
SSLContext
,以便不进行重置需要。@TimothyTruckle:不幸的是,在我的情况下,这是不可能的,因为如果SSLContext的更新按预期工作,我通过访问服务器进行测试。这涉及到第三方库,它不支持单个SSLContext或SSLFactories,因此我必须更新默认的SSLContext。“不幸的是,在我的情况下,这是不可能的,因为我通过访问服务器进行测试”然后您就可以进行验收测试了。但是您还应该有unittest来验证您自己的代码是否正常工作。这些单元测试应该模拟(至少)不属于您自己代码的任何类。您使用哪个构建工具来运行测试?Maven,Ant,Gradle,.@StefanBirkner我在编写单元测试时使用Maven,那么你应该模拟
SSLContext
,这样就不需要重置。@TimothyTruckle:不幸的是,在我的情况下,这是不可能的,因为如果SSLContext的更新按预期工作,我通过访问服务器进行测试。这涉及到第三方库,它不支持单个SSLContext或SSLFactories,因此我必须更新默认的SSLContext。“不幸的是,在我的情况下,这是不可能的,因为我通过访问服务器进行测试”然后您就可以进行验收测试了。但是您还应该有unittest来验证您自己的代码是否正常工作。这些单元测试应该模拟(至少)不属于您自己代码的任何类。您使用哪个构建工具来运行测试?Maven,Ant,Gradle,…@StefanBirkner我用Maven