在SSM整合案例中报错:
Caused by: java.lang.IllegalStateException: No ServletContext set
at org.springframework.util.Assert.state(Assert.java:76)
at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.resourceHandlerMapping(WebMvcConfigurationSupport.java:534)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 43 more
解决办法:
这个错误提示表明没有设置 ServletContext,导致在配置资源处理器时出现了问题。
为了解决这个问题,你可以通过在测试类上添加 @WebAppConfiguration 注解来为测试类提供 ServletContext 环境。
@RunWith(SpringJUnit4ClassRunner.class) //指定使用Spring提供的JUnit测试运行器运行测试,让测试类具有Spring环境的上下文,并支持依赖注入
@ContextConfiguration(classes = SpringConfig.class)
@WebAppConfiguration
//WebAppConfiguration声明当前测试类是一个Web应用的测试类,
// 并且在Spring容器中获取WebAPPlicationContext对象,
// 用于加载该容器的上下文环境,提供依赖注入和运行测试的环境
public class BookServiceTest {
@Autowired
private Bookservice bookService;
@Test
public void testGetById() {
Book book = bookService.getById(1);
System.out.println(book);
}
@Test
public void testGetAll() {
List<Book> all = bookService.getAll();
System.out.println(all);
}
}