Java >> Java tutorial >  >> Java

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());
    }
}

Java tag