我有一个使用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一样。
有没有办法摆脱这种异常?
答案 0 :(得分:1)
我建议不要从测试中调用main方法。如何将main方法内部的代码移到单独的类或方法,然后从main调用它?这将是更具模块化和可测试性的代码。
在调用集成测试时,您将加载上下文/应用程序,这与调用main相似。因此最好测试模块化代码。