从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?
答案 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 { /* ... */ }
此致
萨姆