TestNG – hvordan man kører den samme metode i slutningen af hver test
Jeg har noget som:
@Test(priority = 1) public void test1() { testSomething1(); Assert.assertFalse(errorsExists()); } @Test(priority = 2) public void test2() { testSomething2(); Assert.assertFalse(errorsExists()); } @Test(priority = 3) public void test3() { testSomething3(); Assert.assertFalse(errorsExists()); }
og jeg vil gerne flytte Assert.assertFalse(errorsExists())
til BaseTestCase
eller til TestListener
så jeg behøver ikke at bestå det hver gang i slutningen af testen. Jeg forsøgte at flytte det til TestsListener til onFinish
men metode errorsExists()
kræver driver, og jeg har problemer med at få den derind.
Opdatering:Jeg ønsker at metode errorsExists() påvirke testresultatet. Lad os sige, at fejlExists i test2-metoden returnerer sand -> Jeg vil have følgende resultater:test1 beståettest2 mislykkettest3 bestået
så så vidt jeg ved, kan jeg ikke sætte denne metode til nogen @After-annoteringer, og jeg kan ikke sætte den til onTestFailure eller onTestSuccess i TestListener
Svar
Du kan bruge IHookable
interface for at opnå dette. Dette bruges normalt (ifølge dokumentationen) til at udføre nogle handlinger før teststarten. Men det fungerer også fint til operationer i slutningen af hver test.
Opret en BaseTest
som implementerer denne grænseflade og lader dine testklasser udvide BaseTest
.
public class BaseTest implements IHookable { @Override public void run(IHookCallBack cb, ITestResult testResult) { cb.runTestMethod(testResult); // invokes the actual test case Assert.assertFalse(errorsExists()); } }