Je veux faire de la journalisation tout en exécutant mon test Junit. Dans Junit 3.x, il était toujours facile d'obtenir le nom du boîtier de test en cours d'exécution, peu importe la manière dont le cas de test a été instancié: dans Junit 4 choses semblent être pas si faciles . Est-ce que quelqu'un connaît une solution à cela? Existe-t-il une option pour réfléchir à l'instance de coureur actuelle? P> p>
5 Réponses :
Quel est le problème avec: ? p> p>
Dans Junit 4, les classes de test ne prolongent plus de classe-cadre courante. Donc, il n'y a plus aucune méthode héritée.
D'ACCORD. Je n'obtiens toujours pas ce qui est le `this.getname () à propos de. Comment est-ce différent de cela.getclass (). GetName ()? (J'ai trouvé une autre réponse pour vous)
Dans Junit 3, TestCase.getName () renvoie le nom de la méthode de test. Lorsque vous exécutez un cas de test JUNIT3, plusieurs instances de votre classe de test sont créées, chacune avec un nom différent. Voir JUNIT.SOURCEFORGE.net/DOC/COOKSTOUR/COOKSTOUR.HTM
OK. J'ai trouvé une autre approche [quelque part sur Internet] ( http://www.nlambabil.com/what-happened-a-getName()--td23456371.html) :
@RunWith(Interceptors.class) public class NameTest { @Interceptor public TestName name = new TestName(); @Test public void funnyName() { assertEquals("funnyName", name.getMethodName()); } }
Cela semble exactement dans la direction que je cherchais. Je vais essayer demain.
Malheureusement, cette solution ne sera disponible que dans la version finale à venir de Junit 4.7. Pendant ce temps, je suis obligé de rester avec une version antérieure incluse dans l'architecture-cadre du client. Cependant, c'est la meilleure réponse à la question.
Où est cette classe d'intercepteurs? Je ne le vois pas dans le 4.11 Javadoc
@Péter la réponse à l'aide de la règle annotation est ce qui est en junit maintenant.
Dans Junit 4.7, vous pouvez également obtenir le nom de la méthode de test actuellement exécutée. Peut être gentil lors de la journalisation.
pris à partir de junit 4.7 Notes de publication (lisez-les ici chez GitHub ): P>
public class NameRuleTest { @Rule public TestName name = new TestName(); @Test public void testA() { assertEquals("testA", name.getMethodName()); } @Test public void testB() { assertEquals("testB", name.getMethodName()); } }
public class FooTest { @Rule final public TestRule traceTestWatcher = new TestWatcher() { @Override protected void starting(Description d) { System.out.println(d); } }; @Test public void testBar() { ... } @Test public void testBaz() { ... } }
Je sais que c'est vieux, mais voici une méthode utile (non juniit) que je mets au sommet de tous mes tests.
public static void printTestName(){ final StackTraceElement[] ste = new Throwable().getStackTrace(); int buffer = 35 - ste[1].getMethodName().length(); System.out.println("*******************************************************"); System.out.println("* TEST: " + ste[1].getMethodName() + getBuffer(buffer) + "*"); System.out.println("*******************************************************"); } private static String getBuffer(int offset){ StringBuilder buffer = new StringBuilder(""); for(int i = 1; i < offset; i++){ buffer.append(" "); } return buffer.toString(); }
Semble similaire à: Stackoverflow.com/questions/473401/...