OK, die @Ignore
Anmerkung ist also gut, um zu markieren, dass ein Testfall nicht ausgeführt werden sollte.
Manchmal möchte ich jedoch einen Test ignorieren, der auf Laufzeitinformationen basiert. Ein Beispiel könnte sein, wenn ich einen Parallelitätstest habe, der auf einem Computer mit einer bestimmten Anzahl von Kernen ausgeführt werden muss. Wenn dieser Test auf einem Einprozessor-Computer ausgeführt würde, wäre es meiner Meinung nach nicht richtig, den Test nur zu bestehen (da er nicht ausgeführt wurde), und es wäre sicherlich nicht richtig, den Test nicht zu bestehen und den Build zu brechen .
Daher möchte ich in der Lage sein, Tests zur Laufzeit zu ignorieren, da dies das richtige Ergebnis zu sein scheint (da das Testframework den Build bestehen lässt, aber aufzeichnet, dass die Tests nicht ausgeführt wurden). Ich bin mir ziemlich sicher, dass die Anmerkung mir diese Flexibilität nicht bietet, und vermute, dass ich die Testsuite für die betreffende Klasse manuell erstellen muss. In der Dokumentation wird jedoch nichts darüber erwähnt, und beim Durchsuchen der API ist auch nicht klar, wie dies programmgesteuert erfolgen würde (dh wie erstelle ich programmgesteuert eine Instanz Test
oder ähnliches, die der durch die @Ignore
Annotation erstellten entspricht?).
Wenn jemand in der Vergangenheit etwas Ähnliches getan hat oder eine gute Vorstellung davon hat, wie ich sonst vorgehen könnte, würde ich mich freuen, davon zu hören.
quelle
@BeforeClass
Annotation, bei der Ihre Annahme dort fehlschlagen kann, wodurch die gesamte Klasse übersprungen wird. Eine andere ist@ClassRule
(für die feinkörnige Kontrolle, aber einmal über die gesamte Klasse).Sie sollten das
Junit-ext
Projekt auschecken . Sie habenRunIf
Anmerkungen, die bedingte Tests durchführen, wie:[Codebeispiel aus ihrem Tutorial]
quelle
Assume
direkt darauf eingehen werde, um keine weitere Abhängigkeit einzuführen.@RunIf
trennt die Bedingung, wann ein Test ausgeführt werden soll, vom eigentlichen Testcode, was ich für gut halte. Was ich nicht mag ist, dass es einen bestimmten Testläufer erfordert. Deshalb habe ich eine JUnit-Regel geschrieben, um Tests unbedingt zu ignorieren.In JUnit 4 können Sie auch eine Anmerkung erstellen, um anzugeben, dass der Test Ihren benutzerdefinierten Kriterien entsprechen muss. Erweitern Sie dann den Standardläufer um Ihren eigenen und stützen Sie Ihre Entscheidung mithilfe von Reflection auf die benutzerdefinierten Kriterien. Es könnte ungefähr so aussehen:
quelle
BlockJUnit4ClassRunner
dieisIgnored
Methode nicht mehr angeboten wird.Ein kurzer Hinweis:
Assume.assumeTrue(condition)
Ignoriert die restlichen Schritte, besteht aber den Test. Verwenden Sieorg.junit.Assert.fail()
die bedingte Anweisung , um den Test nicht zu bestehen . Funktioniert genauso wieAssume.assumeTrue()
, besteht den Test jedoch nicht.quelle