2017-10-19 26 views
0

J'ai un test unitaire Java: TestTest unitaire - chemin relatif entraînant l'échec du test?

@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; 
    } 

Quand je lance ce localement dans Intelij cela fonctionne comme prévu, mais quand je le lance en jenkins il échoue, est-ce à cause de moi en utilisant le chemin relatif? par exemple:

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

Comment puis-je faire en sorte que le chemin vers ce fichier se trouve lors de l'exécution sur jenkins et localement?

+0

Quel est le système de construction utilisez-vous, gradle, Maven ou autre chose? –

+0

Où se trouve l'emplacement du fichier json? Est-ce dans le même paquet que le fichier de test? – Mitch

+0

Utilisez probablement 'ClassLoader.getResourceAsStream' à la place:' PersonsTest.class.getClassLoader(). GetResourceAsStream (...) '. En outre, peut-être essayer de supprimer le premier '/' sur le chemin que vous passez à 'getResourceAsStream' (même si je ne suis pas sûr que l'on fait une différence) –

Répondre

1

Supposant person1Stub.json est sur votre chemin de classe lorsque vous exécutez le test de votre système de construction, qui fait les oeuvres suivantes:

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

non cela ne fonctionne pas sans le/en face – java123999

+0

ok - fonctionne-t-il lorsque vous chargez en utilisant 'ClassLoader.getResourceAsStream'? –