Comment faire @BeforeClass courir avant charges printemps TestContext up?
-
14-10-2019 - |
Question
il devrait être morceau de gâteau pour les programmeurs utilisant testng. J'ai ce scénario
@ContextConfiguration(locations={"customer-form-portlet.xml", "classpath:META-INF2/base-spring.xml" })
public class BaseTestCase extends AbstractTestNGSpringContextTests {
...
@BeforeClass
public void setUpClass() throws Exception {
Mais je dois le contexte du printemps pour être charger après @BeforeClass. Je je suis venu avec des méthodes de AbstractTestNGSpringContextTests remplaçant:
@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);
}
et faire ma méthode
@BeforeClass(alwaysRun = true, dependsOnMethods = "setUpClass")
protected void springTestContextPrepareTestClass() throws Exception {
}
Mais je reçois:
Causé par: org.testng.TestNGException: org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance () ne sont pas autorisés à dépendre protégé néant org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextBeforeTestClass () jette java.lang.Exception
Rendre public ne pas non plus d'aide. Pourrait-il mentionner quelqu'un ici si cela peut être fait d'une manière de travail :-) Je sais que je pouvais charger le TestContext manuellement, mais ce ne serait pas si fantaisie.
méthodeIl fonctionne comme ça, mais TestContextManager n'est pas visible, donc je ne peux pas appeler prepareTestInstance () sur elle:
@Override
@BeforeClass(alwaysRun = true, dependsOnMethods = "setUpClass")
public void springTestContextPrepareTestInstance() throws Exception {
}
La solution
méthode Eh bien, je personnalisé créé DependencyInjectionTestExecutionListener et je outrepassée injectDependencies () et fait mon code d'initialisation là
@TestExecutionListeners( inheritListeners = false, listeners = {DITestExecutionListener.class, DirtiesContextTestExecutionListener.class})
@ContextConfiguration(locations= "customer-form-portlet.xml")
public class BaseTestCase extends AbstractTestNGSpringContextTests {
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);
}