256 votes

Obtenir le nom d’en cours d’exécution de test JUnit 4

Dans JUnit 3, j'ai pu obtenir le nom de la cours d'exécution de test comme ceci:

public class MyTest extends TestCase
{
    public void testSomething()
    {
        System.out.println("Current test is " + getName());
        ...
    }
}

qui devrait afficher "test en cours est testequelquechose".

Est-il un out-of-the-box ou simple moyen de le faire dans JUnit 4?

Contexte: bien Évidemment, je ne veux pas, il suffit d'imprimer le nom du test. Je veux de test de charge spécifique des données qui sont stockées dans une ressource avec le même nom que le test. Vous le savez, la convention sur la configuration et tout ça.

Merci!

410voto

FroMage Points 1700

JUnit 4.7 ajouté cette fonctionnalité qu'il semble. On dirait que cela vous obtiendrez le nom de la méthode :

125voto

Duncan Points 22780

JUnit 4.7.x - 4.8.x

L'approche suivante apparaîtra à l'impression des noms de méthode pour tous les tests dans une classe:

@Rule
public MethodRule watchman = new TestWatchman() {
   public void starting(FrameworkMethod method) {
      System.out.println("Starting test: " + method.getName());
   }
};


JUnit 4.9.x à partir de

Depuis JUnit 4.9, l' TestWatchman classe a été dépréciée en faveur de l' TestWatcher classe, qui a la même invocation:

@Rule
public TestRule watcher = new TestWatcher() {
   protected void starting(Description description) {
      System.out.println("Starting test: " + description.getMethodName());
   }
};

8voto

journeyman Points 51

Envisagez d’utiliser SLF4J (Simple journalisation Facade pour Java) fournit quelques améliorations soignées à l’aide de messages paramétrables. Combinant SLF4J avec des implémentations de règle JUnit 4 peut fournir des techniques plus efficaces de la journalisation du classe test.

6voto

chris.f.jones Points 348

Une façon alambiquée est de créer votre propre Coureur par sous-classement org.junit.les coureurs.BlockJUnit4ClassRunner.

Vous pouvez ensuite faire quelque chose comme ceci:

public class NameAwareRunner extends BlockJUnit4ClassRunner {

    public NameAwareRunner(Class<?> aClass) throws InitializationError {
        super(aClass);
    }

    @Override
    protected Statement methodBlock(FrameworkMethod frameworkMethod) {
        System.err.println(frameworkMethod.getName());
        return super.methodBlock(frameworkMethod);
    }
}

Ensuite, pour chaque classe de test, vous aurez besoin d'ajouter une annotation @RunWith(NameAwareRunner.class) annotation. Alternativement, vous pouvez mettre cette annotation sur un Test de la super-classe si vous ne voulez pas de se rappeler à chaque fois. Ceci, bien sûr, des limites de votre sélection de coureurs, mais qui peut être acceptable.

Aussi, il peut prendre un peu de kung-fu pour obtenir le test en cours nom du Coureur et dans votre cadre, mais au moins vous obtient le nom.

3voto

cordellcp3 Points 1713

JUnit 4 n’a pas de n’importe quel mécanisme d’out-of-the-box pour un cas de test obtenir son propre nom (y compris pendant le programme d’installation et de démontage).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X