测试代码:package com.teachers.test;import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;import com.github.pagehelper.PageInfo;//使用spring测试模块进行测试@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:*/applicationContext.xml","classpath:*/dispatcherServlet-servlet.xml"})
public class FindAllVideoControllerTest {
MockMvc mockMvc;
@Autowired
WebApplicationContext context;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testController() throws Exception {
MockHttpServletRequestBuilder req = MockMvcRequestBuilders.get("classpath:findAllVideos").param("pageNum", "1");
MvcResult ret = mockMvc.perform(req).andReturn();
MockHttpServletRequest request = ret.getRequest();
PageInfo<?> pageInfo = (PageInfo<?>) request.getAttribute("pageInfo");
System.out.println(pageInfo);
}
}
package com.teachers.test;import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;import com.github.pagehelper.PageInfo;//使用spring测试模块进行测试@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:*/applicationContext.xml","classpath:*/dispatcherServlet-servlet.xml"})
public class FindAllVideoControllerTest {
MockMvc mockMvc;
@Autowired
WebApplicationContext context;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testController() throws Exception {
MockHttpServletRequestBuilder req = MockMvcRequestBuilders.get("classpath:findAllVideos").param("pageNum", "1");
MvcResult ret = mockMvc.perform(req).andReturn();
MockHttpServletRequest request = ret.getRequest();
PageInfo<?> pageInfo = (PageInfo<?>) request.getAttribute("pageInfo");
System.out.println(pageInfo);
}
}Controller代码:package com.teachers.controller;import java.util.List;import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.teachers.beans.VideoWithBLOBs;
import com.teachers.service.VideoService;@Controller
public class VideosController {
@Autowired
VideoService videoService;
//默认分页查询
@RequestMapping("/findAllVideos")
public String getVideos(@RequestParam(value="pageNum",defaultValue = "1")Integer pageNum,
Model model) {
System.out.println("controller");
//利用pageHelper创建分页
PageHelper.startPage(pageNum, 5);
List<VideoWithBLOBs> list = videoService.getAll();
System.out.println("running");
//这个PageInfo的构造器表示,显示连续五个页面的按钮
PageInfo<VideoWithBLOBs> pageInfo = new PageInfo<VideoWithBLOBs>(list,5);
model.addAttribute("pageInfo", pageInfo);
System.out.println(model);
return "list";
}
}文件组织结构:当我在测试代码里面随便写一个URI的时候输出一个null,写成上面的地址的时候报空指针异常,两个写法Controller中的代码都没有被执行,请问是什么问题,我传入的对象都是自动装配成功了的。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;import com.github.pagehelper.PageInfo;//使用spring测试模块进行测试@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:*/applicationContext.xml","classpath:*/dispatcherServlet-servlet.xml"})
public class FindAllVideoControllerTest {
MockMvc mockMvc;
@Autowired
WebApplicationContext context;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testController() throws Exception {
MockHttpServletRequestBuilder req = MockMvcRequestBuilders.get("classpath:findAllVideos").param("pageNum", "1");
MvcResult ret = mockMvc.perform(req).andReturn();
MockHttpServletRequest request = ret.getRequest();
PageInfo<?> pageInfo = (PageInfo<?>) request.getAttribute("pageInfo");
System.out.println(pageInfo);
}
}
package com.teachers.test;import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;import com.github.pagehelper.PageInfo;//使用spring测试模块进行测试@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:*/applicationContext.xml","classpath:*/dispatcherServlet-servlet.xml"})
public class FindAllVideoControllerTest {
MockMvc mockMvc;
@Autowired
WebApplicationContext context;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testController() throws Exception {
MockHttpServletRequestBuilder req = MockMvcRequestBuilders.get("classpath:findAllVideos").param("pageNum", "1");
MvcResult ret = mockMvc.perform(req).andReturn();
MockHttpServletRequest request = ret.getRequest();
PageInfo<?> pageInfo = (PageInfo<?>) request.getAttribute("pageInfo");
System.out.println(pageInfo);
}
}Controller代码:package com.teachers.controller;import java.util.List;import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.teachers.beans.VideoWithBLOBs;
import com.teachers.service.VideoService;@Controller
public class VideosController {
@Autowired
VideoService videoService;
//默认分页查询
@RequestMapping("/findAllVideos")
public String getVideos(@RequestParam(value="pageNum",defaultValue = "1")Integer pageNum,
Model model) {
System.out.println("controller");
//利用pageHelper创建分页
PageHelper.startPage(pageNum, 5);
List<VideoWithBLOBs> list = videoService.getAll();
System.out.println("running");
//这个PageInfo的构造器表示,显示连续五个页面的按钮
PageInfo<VideoWithBLOBs> pageInfo = new PageInfo<VideoWithBLOBs>(list,5);
model.addAttribute("pageInfo", pageInfo);
System.out.println(model);
return "list";
}
}文件组织结构:当我在测试代码里面随便写一个URI的时候输出一个null,写成上面的地址的时候报空指针异常,两个写法Controller中的代码都没有被执行,请问是什么问题,我传入的对象都是自动装配成功了的。
at org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder.updatePathRequestProperties(MockHttpServletRequestBuilder.java:682)
at org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder.buildRequest(MockHttpServletRequestBuilder.java:604)
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:141)
at com.teachers.test.FindAllVideoControllerTest.testController(FindAllVideoControllerTest.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.forEach(Unknown Source)
at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:83)
at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:74)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
private void updatePathRequestProperties(MockHttpServletRequest request, String requestUri) {
if (!requestUri.startsWith(this.contextPath)) {参考下面的方法传入mockMvc.perform的参数试试
https://stackoverflow.com/questions/32245785/how-do-i-give-request-parameters-for-a-post-using-mockmvc
package com.teachers.test;import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;import com.github.pagehelper.PageInfo;//使用spring测试模块进行测试@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:*/applicationContext.xml","classpath:*/dispatcherServlet-servlet.xml"})
public class FindAllVideoControllerTest {
MockMvc mockMvc;
@Autowired
WebApplicationContext context;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testController() throws Exception {
MockHttpServletRequestBuilder req = MockMvcRequestBuilders.post("/findAllVideos","reqType=delete").param("pageNum", "1");
MvcResult ret = mockMvc.perform(req).andReturn();
MockHttpServletRequest request = ret.getRequest();
PageInfo<?> pageInfo = (PageInfo<?>) request.getAttribute("pageInfo");
System.out.println(pageInfo);
}
}只输出了一个null,Controller依然没有执行。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;import com.github.pagehelper.PageInfo;//使用spring测试模块进行测试@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:*/applicationContext.xml","classpath:*/dispatcherServlet-servlet.xml"})
public class FindAllVideoControllerTest {
MockMvc mockMvc;
@Autowired
WebApplicationContext context;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testController() throws Exception {
MockHttpServletRequestBuilder req = MockMvcRequestBuilders.post("/findAllVideos").param("pageNum", "1");
int ret = mockMvc.perform(req).andReturn().getResponse().getStatus();
// MockHttpServletRequest request = ret.getRequest();
// PageInfo<?> pageInfo = (PageInfo<?>) request.getAttribute("pageInfo");
System.out.println(ret);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- 配置spring配置文件的名称和位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classPath:applicationContext.xml</param-value>
</context-param> <!-- 启动IOC容器的ServletContextListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 配置springMVC 前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcherServlet-servlet.xml</param-value>
</init-param>
<!--用来标记是否在项目启动时就加在此Servlet,0或正数表示容器在应用启动时就加载这个Servlet, 当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载.正数值越小启动优先值越高 -->
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>