2017-01-15 4 views
1

Best Practices für Unit Testing erfordern die Verwendung einer Inversion der Kontrolle, um sicherzustellen, dass Komponententests unabhängig voneinander ausgeführt werden, auch wenn sie von Singleton-Instanzen abhängen (jeder Test erhält seinen eigenen "Singleton").Wie Unit-Test eine Bibliothek, die JNI verwendet?

Was ist die Empfehlung zum Testen einer Bibliothek, die JNI verwendet, um eine native Ressource zu bearbeiten, die nur einmal pro Prozess existiert (z. B. das Terminal)?

Ich frage nicht zum Testen der tatsächlichen JNI-Code, sondern der Java-Code, der als Nebeneffekt auf den nativen Code abhängt.

Antwort

0

Es ist das gleiche wie üblich.

Sie erstellen ein Mock der Bibliotheksklasse Code im Test (Schnitt) verwendet und überprüfen Sie die Kommunikation zwischen Ihrem Schnitt und diesem Schein.

class JniUsageTest{ 

    @Rule 
    public MockitoRule mockitoRule = MockitoJUnit.rule(); 

    @Mock 
    private JniInterfaceClass jni; 

    @Test 
    public void testJniCommunication_SomethingToWrite_PassedToInterface(){ 
    // arrange 
    doReturn("the Answer from JNI").when(jni).calledByCut(any(Object.class)); 
    YorClassUnderTest cut = new YorClassUnderTest(jni); 

    // act 
    String resultContainingJniReturn = cut.doSomethingExpectedToWtiteToJni(); 

    // assert 
    verify(jni,times(10)).calledByCut(any(Object.class)); 
    assertThat(resultContainingJniReturn, containsString("the Answer from JNI")); 
    } 

} 
Verwandte Themen