Ich schreibe einen Testausführung Listener. Eine kleine Erweiterung für Junit5 Framework. Es ist notwendig zu wissen, welche Klasse verwendet wird, wenn ein bestimmter Test mit TestIdentifier
und TestPlan
ausgeführt wird.JUnit5 - gibt es eine zuverlässige Möglichkeit, die Klasse eines ausgeführten Tests zu erhalten
((MethodSource) id.getSource().get()).getClassName();
Gibt nur die Klasse, wo ein Test deklariert ist. Aber das bedeutet nicht, dass es von deklarierter Klasse ausgeführt wird.
Zum Beispiel kann ein Test von einer Unterklasse ausgeführt werden.
Parsing-Ergebnisse für TestIdentifier#getUniqueId()
Können von Fall unterscheiden (Einzeltest für junit4, einzigen Test für junit5, dynamische Prüfung für junit5, parametrisierte Test für junit4 usw.)
In diesem Moment Fall ich nicht gefunden habe jede Möglichkeit, das zu tun.
Gibt es einen zuverlässigen Weg, die Klasse eines ausgeführten Tests zu erhalten?
[TEST] (http://junit.org/junit5/docs/current/api/org/junit/jupiter/api/TestInfo.html) als Parameter verwendet wie beschrieben in [3.9. Dependency Injection] (http://junit.org/junit5/docs/current/user-guide/#writing-tests-dependency- injection) könnte helfen. Zumindest gibt es einen optionalen 'getTestClass()' -Accessor. – Sormuras
Leider ist das nicht der Fall, den ich betrachte. Dem TestExecutionListener ist nicht bekannt, was als Parameter an Testmethoden übergeben wird. Zusätzlich bedeutet es, dass jede Testmethode TestInfo als Parameter haben muss - es ist nicht immer so –
Ich habe Ihre Anforderung möglicherweise nicht genau befolgt. In JUnit4 (und ich nehme 5 an) verwenden wir einige '@ Rule'-Annotationen (eine ist ein TestWatcher(), die andere ist nur TestName()), um einen Teil Ihrer Frage zu beantworten. Wir haben auch Thread.currentThread(). GetStackTrace() verwendet und die richtigen Informationen aus dem Stack-Trace ausgegeben. – KevinO