2011-01-03 9 views
4

sollte es ein Stück Kuchen für Programmierer mit testNG sein. Ich habe dieses SzenarioWie @BeforeClass vor dem Start ausgeführt wird Spring TestContext wird geladen?

@ContextConfiguration(locations={"customer-form-portlet.xml", "classpath:META-INF2/base-spring.xml" }) 
    public class BaseTestCase extends AbstractTestNGSpringContextTests { 

... 
     @BeforeClass 
     public void setUpClass() throws Exception { 

Aber ich würde die Feder Kontext muß nach @BeforeClass laden. II kam mit zwingenden AbstractTestNGSpringContextTests Methoden auf:

@BeforeClass(alwaysRun = true) 
protected void springTestContextBeforeTestClass() throws Exception { 
    this.testContextManager.beforeTestClass(); 
} 

@BeforeClass(alwaysRun = true, dependsOnMethods = "springTestContextBeforeTestClass") 
protected void springTestContextPrepareTestInstance() throws Exception { 
    this.testContextManager.prepareTestInstance(this); 
} 

und machen meine Methode

@BeforeClass(alwaysRun = true, dependsOnMethods = "setUpClass") 
protected void springTestContextPrepareTestClass() throws Exception { 
} 

Aber dann bekomme ich:

Verursacht durch: org.testng.TestNGException: org.springframework .test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance() darf nicht von der geschütztenabhängen 0 Leere org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextBeforeTestClass() wirft java.lang.Exception

es auch hilft nicht öffentlich machen. Könnte bitte irgendjemand hier erwähnen, wenn es in einer Arbeitsweise getan werden kann :-) Ich weiß, dass ich den testContext manuell laden könnte, aber das wäre nicht so ausgefallen.

Es ist wie das funktioniert, aber TestContextManager ist nicht sichtbar, so dass ich nicht prepareTestInstance() -Methode für sie anrufen:

@Override 
@BeforeClass(alwaysRun = true, dependsOnMethods = "setUpClass") 
public void springTestContextPrepareTestInstance() throws Exception { 
} 

Antwort

2

Nun habe ich benutzerdefinierte DependencyInjectionTestExecutionListener und ich habe außer Kraft gesetzt injectDependencies() -Methode und meine getan init Code in dort

@TestExecutionListeners(inheritListeners = false, listeners = {DITestExecutionListener.class, DirtiesContextTestExecutionListener.class}) 
@ContextConfiguration(locations= "customer-form-portlet.xml") 
public class BaseTestCase extends AbstractTestNGSpringContextTests { 

UND

public class DITestExecutionListener extends DependencyInjectionTestExecutionListener { 


    protected void injectDependencies(final TestContext testContext) throws Exception { 

     INITSTUFF(); 

     Object bean = testContext.getTestInstance(); 
     AutowireCapableBeanFactory beanFactory = testContext.getApplicationContext().getAutowireCapableBeanFactory(); 
     beanFactory.autowireBeanProperties(bean, AutowireCapableBeanFactory.AUTOWIRE_NO, false); 
     beanFactory.initializeBean(bean, testContext.getTestClass().getName()); 
     testContext.removeAttribute(REINJECT_DEPENDENCIES_ATTRIBUTE); 
    } 
Verwandte Themen