1
votes

Comment passer des arguments de ligne de commande à Junit Test

J'ai une classe principale qui accepte les arguments de ligne de commande et je passe ce paramètre à une autre classe. Maintenant, je dois tester la myClass avec des paramètres. J'ai JUnit pour le tester mais je veux savoir comment le réussir dans le test

public class JsonFileTest {
    public static void main(String[] fileNames) {
        myClass class = new myClass(fileNames);
    }
}

Je suis un débutant dans JUnit et je l'apprends donc si des conseils seraient très appréciés. J'ai besoin de transmettre les noms de fichiers à une méthode de classe.


0 commentaires

4 Réponses :


1
votes

Il semble contre-intuitif que vous souhaitiez paramétrer vos tests unitaires de cette manière. Je vous suggère de penser à quelques ensembles d'arguments et de les coder en dur dans vos tests unitaires. De cette façon, ils sont reproductibles et, espérons-le, offrent une bonne couverture.


0 commentaires

1
votes

Vous n'avez pas besoin de passer des paramètres de ligne de commande à votre exécution JUnit. Au lieu de cela, vos méthodes de test doivent tout construire / préparer et appeler votre constructeur new myClass (...) avec les paramètres que votre programme d'origine ferait lors de l'utilisation des paramètres de ligne de commande. Le code pourrait ressembler à ceci:

@Test
public void checkForWhatever() {
    // prepare everything here like create a temp file
    File x = ...;
    String filename = x.getName(); // or maybe even x.getAbsolutePath();

    String[] arguments = new String[1];
    arguments[0] = filename;

    // now call your constructor
    myClass obj = new myClass(arguments);

    // do any checks here now
    Assertions.assertTrue(obj.getWhatever());
    // ...
}


0 commentaires

4
votes

Plusieurs points utiles pour le débutant:

  1. Vous ne pouvez pas nommer votre objet "classe" en Java.

  2. Il est recommandé de suivre la convention de dénomination Java, le nom de la classe doit donc commencer par une majuscule.

Maintenant, à propos des arguments de ligne de commande. Vous avez une réponse dans votre code:

@Test
public void testConstructor(){
   myClass class = new myClass(new String[]{"file1", "file2"});
   /* Your assertions here */

}

String [] fileNames - est un tableau d'arguments de ligne de commande.

Donc pour fournir des arguments à votre méthode, initialisez-la avec le paramètre dont vous avez besoin.

Quelque chose comme:

@Test
public void testMainMethod(){
   JsonFileTest.main(new String[]{"file1", "file2"});
}

Mais dans la vraie vie ce n'est pas une bonne idée pour tester une méthode principale. Il ne renvoie rien, vous ne pouvez donc créer qu'un test pour vérifier qu'il lève / ne lance pas d'exception. L'idée est de tester toute la logique. Dans cet exemple de cas, construction d'objet:

public static void main(String[] fileNames) {


0 commentaires

0
votes

Je veux passer des arguments à une méthode @BeforeAll pour créer des répertoires manquants.

Plusieurs projets reposent sur ces répertoires, mais les projets sont situés à des emplacements différents:

  1. "C: / Workspace / Project1"
  2. "C: / Workspace / Project2"
  3. "C: / Users / Test / Project3" 4
  4. etc

Je voudrais passer le chemin du fichier comme variable aux méthodes JUnit afin qu'il puisse créer un journal, une température, une entrée, etc. à l'intérieur de chaque projet. Comment puis-je faire cela en utilisant cli? J'ai essayé:

    public class ConnectIntegrationTest {

        private String workspace;


        public ConnectIntegrationTest(String localWorkspace) {
            this.workspace = localWorkspace;
        }

@BeforeAll
    void setupMissingDirectories() throws Exception {

De plus, j'ai un constructeur qui prend un paramètre:

  java -jar junit-platform-console-standalone-1.5.2.jar --class-path out --scan-class-path "C:\Workspace\Project1"

Je dois manquer quelque chose ici ...


0 commentaires