2016-10-12 2 views
0

In JUnit Frühjahr Integration können wir alle Testklassen zu einer abstrakten Klasse erweitern, um @Before Implementierung an einer Stelle zu haben.TestNg + Spring Integration Wie abstrahieren beforeMethod

Aber in TestNG, da wir alle Testklassen auf AbstractTestNGSpringContextTests erweitern müssen, können wir nicht auf eine abstrakte Klasse erweitern. Irgendeine Idee, wie man eine abstrakte Klasse mit @BeforeMethod, @AfterMethod in TestNG mit Spring hat?

Bitte geben Sie ein Beispiel an.

Antwort

1

Ist das wonach Sie suchen?

zuerst eine Klasse erstellen, die Ihre benutzerdefinierten @BeforeMethod beherbergen wird und @AfterMethod kommentierten Methoden wie folgt:

public class LocalSpringBase extends AbstractTestNGSpringContextTests { 

    @BeforeMethod 
    public void beforeMethod() { 
     System.err.println("Another beforeMethod"); 
    } 

    @AfterMethod 
    public void afterMethod() { 
     System.err.println("Another afterMethod"); 
    } 

} 

Sie haben dann Ihre tatsächliche Testklasse Ihre LocalSpringBase erstrecken, wie unten dargestellt:

@ContextConfiguration (locations = {"classpath:spring-test-config.xml"}) 
public class TestSpring extends LocalSpringBase { 

    @Autowired 
    EmailGenerator emailGenerator; 

    @Test() 
    void testEmailGenerator() { 
     String email = emailGenerator.generate(); 
     System.out.println(email); 

     Assert.assertNotNull(email); 
     Assert.assertEquals(email, "[email protected]"); 
    } 

} 

Einschließlich der übrigen Klassen auch der Vollständigkeit halber Die Schnittstelle

public interface EmailGenerator { 
    String generate(); 
} 

Eine konkrete Umsetzung

@Service 
public class RandomEmailGenerator implements EmailGenerator { 

    @Override 
    public String generate() { 
     return "[email protected]"; 
    } 
} 

Die Beispiele aus www.mkyong.com/

entlehnt wurden