我正在写一些方法来操作的SSLContext。我编写了JUnit-Test来测试功能。不幸的是我卡住了,因为我找不到重置SSLContext的方法。所以我必须在它自己的JVM中运行它自己的每个测试,因为之前测试的影响会影响下一个测试。 SSLContext接口不可重置,因为它不是以DI方式编写的。的Java的JUnit:复位的SSLContext在JUnit测试
有没有办法重置的SSLContext?
有没有办法在自己的JVM上运行的每个基于JUnit测试? (我使用Maven作为构建管理工具)
这将无法正常工作这将只是部分工作:
SSLContext defaultSSLContext = SSLContext.getDefault();
// manipulate SSLContext
SSLContext.setDefault(defaultSSLContext);
编辑2017年2月2日
我的Java安装被破坏
我的Java安装被打破,所以在我的情况下默认SSLContext为空(null == SSLContext.getDefault())
。所以我无法设置SSLContext。该方法引发NullPointerException。我重新安装了Java,现在SSLContext再次运行,并且默认的SSLContext不会为空。
正在重置的的SSLContext
在一个临时变量存放的SSLContext并恢复它之后会为SSLContext工作。但不适用于像java.net.URL这样的实现。这些实现从第一次调用开始保持SSLContext的Singleton实例,并且在JVM运行时不会改变它。
JUnit的分叉运行与Maven
我跟着斯特凡·伯克纳的建议,并使用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中运行。
当编写单元测试代码* *,那么你应该嘲笑'SSLContext'从而无需复位。 –
@TimothyTruckle:不幸的是,这是不可能在我的情况,因为我通过访问服务器,如果SSLContext中的更新工作正常进行测试。涉及第三方库,它不支持单独的SSLContext或SSLFactories,所以我必须更新默认的SSLContext。 –
*“不幸的是,这是不可能在我的情况,因为我通过访问服务器”测试,然后*你在做*验收试验*没关系。但你也应该有* unittest *来验证你自己的代码是否正常工作。这些* unittests *应该嘲笑任何不属于你自己的代码的类(至少)。 –