2017-01-28 3 views
0

Ich schreibe einige Methoden, um den SSLContext zu manipulieren. Ich habe JUnit-Test geschrieben, um die Funktionalität zu testen. Leider stecke ich fest, weil ich keinen Weg finde, den SSLContext zurückzusetzen. Also muss ich jeden Test in seiner eigenen JVM selbst durchführen, da der Einfluss des vorherigen Tests den nächsten Test beeinflusst. Der SSLContext scheint nicht rücksetzbar zu sein, da er nicht DI-geschrieben ist.Java JUnit: SSLContext in JUnit Test zurücksetzen

Gibt es eine Möglichkeit, den SSLContext zurückzusetzen?

Gibt es eine Möglichkeit, jeden JUnit-Test in seiner eigenen JVM auszuführen? (Ich verwende Maven als Build-Management-Werkzeug)

Dies wird nicht funktionieren Dies wird nur teilweise arbeiten:

SSLContext defaultSSLContext = SSLContext.getDefault(); 

// manipulate SSLContext 

SSLContext.setDefault(defaultSSLContext); 

bearbeiten 2017-02-02

Mein Java Die Installation wurde abgebrochen

Meine Java-Installation war defekt, in meinem Fall war der Standard-SSLContext null (null == SSLContext.getDefault()). Also konnte ich den SSLContext nicht einstellen. Die Methode löst eine NullPointerException aus. Ich habe Java neu installiert und jetzt funktioniert der SSLContext wieder und der Standard-SSLContext wird nicht null sein.

den SSL-Kontext Reseting

Speicher den SSL-Kontext in einer Zwischenvariable und die Wiederherstellung wird es danach für den SSL-Kontext arbeiten. Aber nicht für die Implementierung wie java.net.URL. Diese Implementierungen führen dazu, dass eine Singleton-Instanz des SSLContext vom ersten Aufruf an beibehalten wird und während der Laufzeit der JVM niemals geändert wird.

JUnit gegabelt Run mit Maven

I Stefan Birkner der Vorschlag gefolgt und Maven todsichere Plugin verwendet.

habe ich im Projekt 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> 

ich spaltete die JUnit-Test in Teile, die ohne störende auf ihre eigenen laufen konnte. So FooTest.java wurde Foo01Test.java ... Foo03Test.java. Jetzt laufen die Tests innerhalb von Eclipse und mit Maven.

+0

Wenn * Unittests zu schreiben * dann sollten Sie die 'SSLContext' verspotten, so dass kein Reset erforderlich ist. –

+0

@TimothyTruckle: Leider ist das in meinem Fall nicht möglich, da ich beim Zugriff auf einen Server teste, ob das Update des SSLContext wie erwartet funktioniert. Es handelt sich um eine Third-Party-Bibliothek, die keine individuellen SSLContext- oder SSLFactories unterstützt, daher muss ich den Standard-SSLContext aktualisieren. –

+1

* "Leider ist das in meinem Fall nicht möglich, weil ich durch Zugriff auf einen Server teste" * dann tust du * Abnahmetests * das ist in Ordnung. Sie sollten aber auch * unittest * haben, um zu überprüfen, ob Ihr eigener Code korrekt funktioniert. Diese * Unittests * sollten jede Klasse verspotten, die nicht zu Ihrem eigenen Code gehört (zumindest). –

Antwort