2

我有一个 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了,ApplicationContextNull在这里。

但是在SpringJUnitTestRunner课堂上MySimpleTester我可以找到正确初始化的 applicationContext 。我不包括mySimpleConfig.xml和包含的文件。MyAdapter当在应用程序服务器中运行时,类中的方法在getSimpleLinksList()Web 应用程序中工作得非常好,并且在那里获得了 appcontext。

只有通过 Spring 测试器才能访问静态应用程序上下文AppFactory类,因为它是通过AppFactory.getPropertiesObj(). 当其他测试类正在执行时,我正确设置了类路径。

4

2 回答 2

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**();
}
于 2015-08-22T03:30:09.993 回答
0

我认为这是在创建多个应用程序上下文时发生的。AplliCationContext 对象应该是单例的。但是当我们再次从静态方法调用 applicationContext 时,它指的是完全不同的配置。ApplicationContext 甚至没有在那里初始化。

当从 Spring MVC webcontanier 调用相同的模块时,不会发生这种情况。仅当您尝试使用 Spring 测试器类 RunWith(SpringJUnit4ClassRunner.class) 时才会发生这种情况。我可以在业务方法中传递 AppContext,但我不想更改业务方法签名。我在春季社区中发现了一些类似问题的线程。

于 2015-08-24T15:57:16.730 回答