Utilisation des ID externes

Vous pouvez utiliser les ID externes pour identifier de manière unique les nœuds de tests et de suites dans les packages de tests. Un ID externe est fourni en tant que propriété de chaque nœud de test et chaque nœud de suite. L'ID externe généré automatiquement identifie une méthode de test unique par le nom complet de la classe et la méthode en ajoutant le symbole "~".

Pour les tests JUnit, le schéma suivant est utilisé pour l'ID externe généré automatiquement : ~<nom du package>.<nom de la classe>#<nom de la méthode>.

Lors de la refactorisation des classes de tests JUnit, la création automatique de l'ID externe n'est pas applicable, car les informations sur les résultats des tests antérieurs à la refactorisation seront perdues au moment de la création d'un test. Dans ce cas, l'ID externe du test doit être défini manuellement. La méthode refactorisée est à nouveau identifiable, car l'ID externe ne change pas lors du déplacement d'un test JUnit ou lors du changement de son nom. L'ID externe peut être défini manuellement dans le code source en tant qu'annotation.

L'exemple de code suivant illustre une annotation pour les tests JUnit :

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface ExternalId {
  String externalId();
}

L'annotation est utilisable dans un test JUnit pour annoter les classes et les méthodes de tests, comme illustré :

import static org.junit.Assert.*;        
import org.junit.Test;

import com.borland.runner.ExternalId;

@ExternalId(externalId="JUnit4test")
public class JUnit4test {
  
  @Test
  @ExternalId(externalId="MyExtId1")
  public void test1() {
    ...
  }
  
  @Test
  @ExternalId(externalId="MyExtId2")
  public void test2() {
    ...
  }
}

Notez que l'utilisation des ID externes avec l'exécuteur JUnit « org.junit.runners.Parameterized » n'est pas prise en charge pour les méthodes de tests, car l'ID externe n'est pas unique pour les exécutions répétées d'une méthode avec différents paramètres. Comme solution de contournement, un ID externe peut être spécifié au niveau de la classe, mais doit être omis au niveau de la méthode. Voici un exemple :

@RunWith(Parameterized.class)
@ExternalId(externalId="parameterizedWithExtId")
public class TestCaseParameterizedWithExternalId {

  @Parameters
  public static Collection<Object[]> parameterFeeder() {
    return Arrays.asList(new Object[][] {
        { "param_name1", "param_value1" }, // set of parameters per run, type matching constructor must exist!
        { "param_name3", "param_value3" },
        { "param_name2", "param_value2" },
      }
    );
  }

  private String paramName;
  private String paramValue;
  
  public TestCaseParameterizedWithExternalId(String paramName, String paramValue) {
    this.paramName = paramName;
    this.paramValue = paramValue;
  }
  
  @Test
  public void testWithParams() {
    System.out.println(String.format("run with parameter: name='%s', value='%s'", paramName, paramValue));
  }
 
}
Remarque : Le paramètre de l'ID externe pour un test JUnit n'est possible que pour les tests qui utilisent JUnit 4.4 ou version supérieure.