我有一个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()
静态调用。我正确地设置了类路径,因为其他测试类正在执行。
答案 0 :(得分:0)
如果要在MySimpleTester中访问当前的ApplicationContext: -
public class MySimpleTester {
@Autowired
ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
myAdapter = (MyAdapter) applicationContext.getBean("myAdapter");
}
@test
public void testGetSimpleList() {
List<SimpleLink> simpleList = **myAdapter.getSimpleLinksList**();
}
答案 1 :(得分:0)
我认为这是在创建多个应用程序上下文时发生的。 AplliCationContext对象应该是单例。但是当我们从静态方法再次调用applicationContext时,它会引用完全不同的确认。 ApplicationContext甚至没有在那里初始化。
当从Spring MVC webcontanier调用相同的模块时,不会发生这种情况。只有当您尝试使用Spring测试程序类RunWith(SpringJUnit4ClassRunner.class)时才会发生这种情况。我可以在业务方法中传递AppContext,但我不想更改bsiness方法签名。我在Spring社区发现了类似问题的一些帖子。