Comment tester rapidement une méthode Java dans Eclipse?


J'ai une méthode simple dans Mon code Java, par exemple

private int specialAdd (int a, int b) {
  if(a < 100) {
    return 100 * a + b;
  } else {
    return a + b;
  }
}

Existe-t-il un moyen de "exécuter/déboguer le code sélectionné" avec des valeurs de paramètre données dans eclipse? J'aimerais vraiment exécuter uniquement cette méthode et afficher le résultat pour quelques valeurs a pour a et b.

Author: Edward, 2014-12-02

7 answers

Existe-t-il un moyen de "exécuter/déboguer le code sélectionné" avec des valeurs de paramètre données dans eclipse?

Non, Eclipse a besoin d'une méthode main régulière ou d'une méthode @Test comme point d'entrée.

Quand je veux faire un mini test "unique", ce que je fais habituellement est

class YourClass {
    private int specialAdd (int a, int b) {
       if(a < 100) {
           return 100 * a + b;
       } else {
           return a + b;
    }

    public static void main(String[] args) {
        System.out.println(new YourClass().specialAdd(10, 100));
    }
}

Puis exécutez (ou déboguez) la classe actuelle. (Conseil de pro: tapez {[2] } et appuyez sur Ctrl+Espace pour l'étendre à une méthode principale complète)


À partir de JDK 9, vous pouvez également utiliser jshell pour ce type de test:

$ ./jshell
|  Welcome to JShell -- Version 1.9.0-internal
|  Type /help for help

-> int specialAdd(int a, int b) {
>>     if (a < 100) {
>>         return 100 * a + b;
>>     } else {
>>         return a + b;
>>     }
>> }
|  Added method specialAdd(int,int)

-> specialAdd(10, 5);
|  Expression value is: 1005
|    assigned to temporary variable $2 of type int
 7
Author: aioobe, 2015-11-12 17:38:09

Configurez votre méthode comme test unitaire, avec JUnit par exemple. De cette façon, vous pourrez tester les méthodes séparément.

Utiliser jUnit, ajouter le @Test annotation à votre méthode. Vous devez ajouter à votre méthode une phrase d'actif pour vérifier le fonctionnement/la performance de votre méthode. Par exemple:

   @Test
   public void testHelloWorld() 
   {
      h.setName("World");
      assertEquals(h.getName(),"World");
      assertEquals(h.getMessage(),"Hello World!");
   }

Puis cliquez sur la méthode et Exécuter en tant que > JUnit Test :

entrez la description de l'image ici

Vous pouvez télécharger JUnit via Maven:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>
 1
Author: Rafa Romero, 2014-12-02 09:37:41

Tout d'abord, vous ne voulez pas tester directement une méthode privée comme celle-ci. S'il était public, vous écririez deux cas de test JUnit, un pour chacun des chemins possibles à travers votre méthode.

public class YourClassTest {

    private YourClass toTest = new YourClass();

    @Test
    public void specialAddMultiplesSmallFirstAddendBy100() {
        int result = toTest.specialAdd(99, 7);
        assertEquals(9907, result);
    }

    @Test
    public void specialAddDoesNotIncreaseLargeFirstAddend() {
        int result = toTest.specialAdd(100, 7);
        assertEquals(107, result);
    }
}

JUnit enregistrera un échec pour chacun de ces cas de test, si les deux arguments de assertEquals ne sont pas égaux. Cela permet à ces tests d'être ajoutés à une batterie de tests unitaires et automatisés.

Mais comme il est privé, vous devriez plutôt utiliser une stratégie similaire pour le tester via n'importe quelle méthode appeler. Vraisemblablement, il y a une méthode publique dans votre classe, qui appelle specialAdd - en testant cette méthode publique, vous testerez implicitement specialAdd aussi.

 1
Author: Dawood ibn Kareem, 2014-12-02 09:57:19
  private static int specialAdd (int a, int b) {
      if(a < 100) {
        return 100 * a + b;
      } else {
        return a + b;
      }
    }
  public static void main(String[] args) {
    System.out.println("" + specialAdd(10,20));
    System.out.println("" + specialAdd(11,21));
    System.out.println("" + specialAdd(12,23));
  }

Voici comment vous pouvez exécuter l'application et voir la sortie. Si vous souhaitez déboguer, marquez d'abord les points d'arrêt. Puis cliquez avec le bouton droit sur votre classe java et sélectionnez "Déboguer en tant que" -> application java. Vous verrez votre curseur se déplacer à travers les points d'arrêt lorsque vous cliquez sur étape à partir de la barre d'outils.

 1
Author: Vishu, 2014-12-02 10:49:37

Utiliser Junit sans paramètres d'entrée et paramètres de sortie:

@Test 
private void specialAdd () {
  // provide the value of a and b
  int a = 30;
  int b = 20;
  if(a < 100) {
    System.out.println("100 * a + b =" + 100 * a + b);
  } else {
    System.out.println("a + b =" + a + b);
  }
}

Ensuite, choisissez le nom de la méthode "specialAdd" et cliquez sur le bouton droit de votre souris,choisissez exécuter > > exécuter junit test.

 0
Author: MageXellos, 2014-12-02 09:32:39

Je vous recommande d'utiliser des frameworks de test comme testng/junit où vous pouvez affirmer des valeurs renvoyées par votre méthode et vous pouvez créer des tests répétables avec eux.

Mais si vous voulez le tester simplement avec main, vous pouvez faire ce qui suit:

 public static void main(String args[]) {
       int number = specialAdd(99, 1);
       if (number != 9901) {
            System.out.println("Expected: " + 9901 + " Actual: " + number);
       }
       if (args.length >= 2) {//with system args
           int number1 = Integer.parseInt(args[0]);
           int number2 = Integer.parseInt(args[1]);
           number = specialAdd(number1, number2);
           if (number != ...) {} 
       }
 }
 0
Author: SMA, 2014-12-02 09:35:40

Dans Eclipse, vous pouvez créer une page de Scrapbook (un fichier avec l'extension .jpage)

Là-dedans, vous pouvez écrire du code java et exécuter comme dans une méthode.

Https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-create_scrapbook_page.htm

Par exemple, créez un test.jpage dans le package avec la classe et la méthode que vous souhaitez tester. Là, écrivez votre code Java

int a = ..., b = ...;
if(a < 100) {
    return 100 * a + b;
} else {
    return a + b;
}

Ou vous pouvez appeler des méthodes de votre classe.

com.mycomp.TestedClass testedInstance = new com.mycomp.TestedClass();
for(int a=0,b=0; b < 100 && a < 100; a++,b++) {
    System.out.println(testedInstance.specialAdd(a,b));
}

, Malheureusement, les importations dans ce fichier doivent être écrits. Vous pouvez exécuter votre code écrit en le sélectionnant > clic droit > exécuter.

 0
Author: Jonas Michel, 2018-05-15 13:25:57