Как заставить @beforeclass запустить предварительную нагрузку на Spring Testcontext?

StackOverflow https://stackoverflow.com/questions/4589052

Вопрос

Это должен быть кусок пирога для программистов, используя 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);
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top