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