Ich möchte einige meiner Testfälle mit KnownFault annotieren - was ziemlich genau das tut, was expectedException erwartet, und etwas Magie mit YouTracks REST-API. Ich möchte auch ein IntermittentFailure-Attribut haben, was bedeuten würde, dass mir bewusst ist, dass der Test gelegentlich mit [exception] [message] fehlschlägt, aber ich möchte nicht, dass dies den Rest meiner Build-Kette blockiert.testng - Erstellen von KnownFault- und IntermittentFailure-Annotationen
Nach einigen Recherchen habe ich, dass meine Testklasse gefunden IHookable implementieren sollte, dann könnte ich so etwas wie dieses:
@Override
public void run(IHookCallBack callBack, ITestResult result) {
callBack.runTestMethod(result);
if (result.getThrowable().getCause() instanceof IllegalArgumentException){
System.out.println("This is expected.");
result.setThrowable(null);
}
else{
System.out.println("Unexpected exception");
}
}
Das Problem dabei ist, die tatsächliche Umsetzung von invokeHookable:
final Throwable[] error = new Throwable[1];
IHookCallBack callback = new IHookCallBack() {
@Override
public void runTestMethod(ITestResult tr) {
try {
invokeMethod(thisMethod, testInstance, parameters);
} catch (Throwable t) {
error[0] = t;
tr.setThrowable(t); // make Throwable available to IHookable
}
}
@Override
public Object[] getParameters() {
return parameters;
}
};
hookable.run(callback, testResult);
if (error[0] != null) {
throw error[0];
}
Leider bedeutet diese letzte Zeile, dass mein Testfall eine Exception auslösen wird, egal wie das error
-Array in der run
-Methode komplett aus meiner Hand ist.
Also, was wäre der richtige Weg, eine Ausnahme abzufangen und so zu behandeln, wie ich es möchte?
Cool, das hat funktioniert. Daher muss die Basisklasse leicht modifiziert werden, wenn ein Listener verwendet wird: Ich habe eine Klasse namens 'TestListener' hinzugefügt, die Ihre vorgeschlagene Implementierung ausführt, dann muss ich die Basisklasse der Tests mit' @Listeners (TestListener.class) 'annotieren . Lief wie am Schnürchen! – RekaB
Oder Sie können einen anderen Listener-Erkennungsmechanismus verwenden, wenn Sie http://testng.org/doc/documentation-main.html#testng-listeners bevorzugen – juherr