0

Ich habe einen Java Unit-Test:Komponententest - relativer Pfad, der den Test fehlschlägt?

@Test 
public void shouldCreateCorectPerson() throws IOException, ParseException { 

    //test data 
    Person expectedPerson = createExpectedObject(PersonsTest.class.getResourceAsStream("/com/my/package/personStub/person1Stub.json")); 

    //other code and asserts... 


} 


     protected static Person createExpectedPerson(InputStream inputStream) throws IOException { 

     Gson gson = new Gson(); 
     Person expectedPerson = gson.fromJson(IOUtils.toString(inputStream, StandardCharsets.UTF_8), Person.class); 
     return expectedPerson; 
    } 

Wenn ich diesen Test lokal ausgeführt in Intelij es wie erwartet funktioniert, aber wenn ich es in jenkins laufe versagt es, ist es mir durch den relativen Pfad? z:

/com/my/package/personStub/person1Stub.json 

Wie kann ich sicherstellen, dass der Pfad zu dieser Datei gefunden wird, wenn auf jenkins läuft und vor Ort?

+0

Welche Build-System verwenden Sie, gradle, Maven oder etwas anderes? –

+0

Wo ist der Speicherort der JSON-Datei? Ist es im selben Paket wie die Testdatei? – Mitch

+0

Verwenden Sie wahrscheinlich stattdessen 'ClassLoader.getResourceAsStream':' Personstest.class.getClassLoader(). GetResourceAsStream (...) '. Versuchen Sie vielleicht auch, das führende '/' auf dem Pfad zu entfernen, den Sie an 'getResourceAsStream' übergeben (obwohl ich nicht sicher bin, ob es einen Unterschied macht) –

Antwort

1

Unter der Annahme, person1Stub.json auf Ihrem Classpath, wenn Sie den Test aus dem Build-System ausführen, wird folgende Arbeiten:

Person expectedPerson = createExpectedObject(PersonsTest.class.getClassLoader().getResourceAsStream("com/my/package/personStub/person1Stub.json")); 
+0

nein es funktioniert nicht ohne/vor – java123999

+0

ok - Funktioniert es beim Laden mit 'ClassLoader.getResourceAsStream'? –