Как заставить @beforeclass запустить предварительную нагрузку на Spring Testcontext?
-
14-10-2019 - |
Вопрос
Это должен быть кусок пирога для программистов, используя Testng. У меня есть этот сценарий
@ContextConfiguration(locations={"customer-form-portlet.xml", "classpath:META-INF2/base-spring.xml" })
public class BaseTestCase extends AbstractTestNGSpringContextTests {
...
@BeforeClass
public void setUpClass() throws Exception {
Но мне понадобится загрузка пружинного контекста после @beforeclass. II придумал переоценку AbstractTestngspringContextTests Методы:
@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);
}
и сделай мой метод
@BeforeClass(alwaysRun = true, dependsOnMethods = "setUpClass")
protected void springTestContextPrepareTestClass() throws Exception {
}
Но тогда я получаю:
Вызвано: org.testng.testngexception: org.springframework.test.context.testng.abstracttestngspringcontexttests.springtestcontextprepreetStinstance () не разрешено зависеть от voidsclerteSlesclescreltSpretSlestSlestS.SpretScleSlestS.SpretScleSlestSlestSlestSlestSlestSlestS. Lang.Exception
Сделайте это публичным также не помогает. Можно угодить здесь, если бы это было сделано в рабочей манере :-) Я знаю, что могу вручную загрузить TestContext, но это не было бы таким необычным.
Это работает так, но TestContextManager не виден, поэтому я не могу назвать на нем метод PreparetestInstance ():
@Override
@BeforeClass(alwaysRun = true, dependsOnMethods = "setUpClass")
public void springTestContextPrepareTestInstance() throws Exception {
}
Решение
Ну, я создал пользовательский зависимость inegyInctionteStexeCutionListener и у меня есть метод переопределения injectDependencies () и выполнил код моего инициации там
@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);
}