TestNG测试中的Spring会话范围的bean?

时间:2014-03-17 13:25:48

标签: spring testng spring-test

从Spring 3.2开始,您可以在测试中使用请求范围和会话范围的bean,可以读取in the Spring reference manual, section 11.3.5

例如:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({"classpath:applicationContext.xml"})
public class Test1
{
    @Autowired
    private MySessionBean state;

    @Test
    public void test() {
        System.out.println(state.toString());
    }
}

以上作品。但是,尝试将其调整为TestNG:

@WebAppConfiguration
@ContextConfiguration({"classpath:applicationContext.xml"})
public class Test2 extends AbstractTestNGSpringContextTests
{
    @Autowired
    private MySessionBean state;

    @Test
    public void test() {
        System.out.println(state.toString());
    }
}

这将抛出异常:

  

java.lang.IllegalStateException:找不到线程绑定请求:是   您指的是实际Web请求之外的请求属性,   或处理原始接收线程之外的请求?

我是做错了还是只使用JUnit而不是TestNG来支持会话范围的bean?

1 个答案:

答案 0 :(得分:2)

如果您不使用Spring Framework 3.2.7或更高版本,默认情况下这将不起作用。

有关详细信息,请参阅SPR-11340

作为解决方法,您可以按如下方式声明测试类

@WebAppConfiguration
@ContextConfiguration("/applicationContext.xml")
@TestExecutionListeners({
  ServletTestExecutionListener.class,
  DependencyInjectionTestExecutionListener.class,
  DirtiesContextTestExecutionListener.class
})
public class Test2 extends AbstractTestNGSpringContextTests { /* ... */ }

此致

萨姆