【发布时间】:2015-11-15 21:39:39
【问题描述】:
我有一个 Spring JUnit 测试器类 MySimpleTester:
@
RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/spring/mySimpleConfig.xml"})
public class MySimpleTester {
@Before
public void setUp() throws Exception {
myAdapter = (MyAdapter) applicationContext.getBean("myAdapter");
}
@test
public void testGetSimpleList() {
List<SimpleLink> simpleList = **myAdapter.getSimpleLinksList**();
}
... ...
在我的适配器类中:
public MyAdapter {
public List<SimpleLink> getSimpleLinksList() {
List<SimpleLink> simLinks = null;
String environment = AppFactory.getPropertiesObj();
... ...
class AppFactory implements ApplicationContextAware {
private static ApplicationContext context;
public void setApplicationContext(ApplicationContext acontext) {
context = acontext;
}
public getPropertiesObj() {
return getAppContext().getBean("propertiesBean");
}
我得到NullPointerException 并看到ApplicationContext 在这里是Null。
但是在SpringJUnitTestRunner 类MySimpleTester 我可以找到正确初始化的applicationContext。我不包括mySimpleConfig.xml 和包含的文件。 MyAdapter 类getSimpleLinksList() 中的方法在应用程序服务器中运行时在Web 应用程序中工作得非常好,并且在那里获得了appcontext。
只有通过 Spring 测试器才能访问静态应用程序上下文 AppFactory 类,因为它是通过 AppFactory.getPropertiesObj() 静态调用的。当其他测试类正在执行时,我正确设置了类路径。
【问题讨论】:
-
MyAdapter.getSimpleLinksList()如何编译,因为AppFactory.getPropertiesObj()不是静态的? -
在实际程序中,我确实有静态方法。在这里写作时,我错过了打字。 public static String getPropertiesObj() { return getAppContext().getBean("propertiesBean").toString(); }
标签: spring springjunit4classrunner