2017-01-28 27 views
0

我正在写一些方法来操作的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中运行。

+0

当编写单元测试代码* *,那么你应该嘲笑'SSLContext'从而无需复位。 –

+0

@TimothyTruckle:不幸的是,这是不可能在我的情况,因为我通过访问服务器,如果SSLContext中的更新工作正常进行测试。涉及第三方库,它不支持单独的SSLContext或SSLFactories,所以我必须更新默认的SSLContext。 –

+1

*“不幸的是,这是不可能在我的情况,因为我通过访问服务器”测试,然后*你在做*验收试验*没关系。但你也应该有* unittest *来验证你自己的代码是否正常工作。这些* unittests *应该嘲笑任何不属于你自己的代码的类(至少)。 –

回答