AbstractApplicationContext尚未刷新,但异常

时间:2018-09-11 10:19:13

标签: java spring testing

我有一个使用jar的独立jar应用程序,如下所示:

class MainClass {    
    public static void main(final String[] args) {
        AbstractApplicationContext applicationContext = new 
        GenericXmlApplicationContext("file-path-to-xml-config");
        ClassA classA = applicationContext.getBean(ClassA.class);
        ...
    } 
}

我正在尝试对上述方法进行集成测试,如下所示:

@ContextConfiguration(locations = { "file-path-to-test-xml-config" })
public class AbstractIT extends AbstractTestNGSpringContextTests {
    @Inject
    private ClassB classB;

    @Test
    public void testMain() {
        classB.someMethod();
        MainClass.main(null);
    }
}

以上设置引发以下异常:

  

java.lang.IllegalStateException:   org.springframework.context.support.AbstractApplicationContext__Generated_OpenPojo@356f20b7   尚未刷新

似乎从测试用例内部以及从main内部创建上下文是冲突的,因此在从main方法实例化它时抛出了异常。

我不想从main方法内部更改spring初始化,因为这是一个独立的应用程序。另外,我想在测试中加载spring上下文,就像在测试中加载test-context一样。

有没有办法摆脱这种异常?

1 个答案:

答案 0 :(得分:1)

我建议不要从测试中调用main方法。如何将main方法内部的代码移到单独的类或方法,然后从main调用它?这将是更具模块化和可测试性的代码。

在调用集成测试时,您将加载上下文/应用程序,这与调用main相似。因此最好测试模块化代码。