2017-10-02 7 views
0

J'ai quelques tests que j'ai écrits dans JUnit construit avec Maven qui utilise les API File et FileWriter, et les tests fonctionnent sur ma machine locale mais pas quand j'essaye de la construire dans Jenkins. Y a-t-il une convention spéciale que je dois suivre pour que mes tests fonctionnent à Jenkins?Comment faire fonctionner la manipulation de fichiers dans Jenkins?

Dans mon fichier de test j'Initialisation quelques pistes pour savoir où mon dossier de ressource est située:

private String resourcesFolderPath = new File("src/test/resources").getAbsolutePath(); 
    private String outputFolderPath = resourcesFolderPath + "/output"; 
    private File outputFolder = new File(outputFolderPath); 

Et voici un test qui échoue dans l'affaire Jenkins:

@Test 
public void test() throws Exception { 
    File file = new File(outputFolder.list()[0]); // File not found exception at this line 
    if (!file.exists()) file.mkdirs(); // I added this line after Jenkins build failed, did not fix the problem 
    String fileListName = file.getName(); 

    FileReader fileReader = new FileReader(outputFolderPath + "/" + fileListName); 
    BufferedReader buffReader = new BufferedReader(fileReader); 

    String firstFileName = buffReader.readLine(); 

    assertTrue(firstFileName.contains("test1.txt")); 

    buffReader.close(); 
    } 

Le dossier de sortie contient le fichier que je veux tester, mais Jenkins échoue avec une exception FileNotFoundException:

java.io.FileNotFoundException: /home/jenkins/workspace/utils-feature-branches-ci/file-list/src/test/resources/output/File_List.txt (No such file or directory) 

La chose étrange est que ce test fonctionne dans ma machine locale lors de la construction avec Maven, mais pas sur Jenkins. Donc ma question est comment puis-je modifier mon code pour que ce test fonctionne avec Jenkins? Toute aide serait appréciée!

+0

Si vous aimez lire quelque chose à partir des ressources du dossier que vous devez passer par 'getClass(). GetResourcesAsStream («/whatever.properties »)' . Lire une liste de répertoires comme vous l'avez fait est une hypothèse que vous avez faite. L'ordre des fichiers ... l'ordre des fichiers dépend de l'OS/JDK donc vous ne devez faire aucune supposition sur la commande que vous obtiendrez les noms de fichiers. De plus, n'utilisez pas les noms de fichiers pour lire le répertoire 'src/test/resources'. – khmarbaise

Répondre

0

Lors de l'exécution de classes de test via JUnit, src/test/resources sera votre chemin de classe.

Donc, l'ajout de cette ligne sera suffisante pour votre but

File file = new File("output"); 
+0

Merci, mais ma question n'est pas vraiment sur JUnit, le chemin de sortie que j'ai déjà, mais ça ne marche pas sur Jenkins. –