本文主要讲的是 使用mock方式单元测试。
Spring测试框架提供MockMvc对象,可以在不需要客户端-服务端请求的情况下进行MVC测试,完全在服务端这边就可以执行Controller的请求,跟启动了测试服务器一样。
1.@Autowired引入测试的类,然后继承基类,测试方法上面要加@Test注解。
例:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Main.class) //Main.class是springboot的启动类名
@WebAppConfiguration public class StyleControllerTest {
@Autowired
private WebApplicationContext context; //引入测试的类
private MockMvc mockMvc;
@Autowired
protected WebApplicationContext wac;
@Before
public void setupMockMvc() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象
}
@Test
public void testSend() throws Exception {
}
}
2.testSend()
1).mockMvc.perform执行一个请求
2).MockMvcRequestBuilders.get("/user/1")构造一个get请求
3).ResultActions.andExpect添加执行完成后的断言
4).ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
5).ResultActions.andReturn表示执行完成后返回相应的结果。
3.注释列表及含义:
@test 这个注释说明依附在 JUnit 的 public void 方法可以作为一个测试案例
@Before 在 public void 方法加该注释是因为该方法需要在 test 方法前运行(有些测试在运行前需要创造对象)
@After 在 public void 方法加该注释是因为该方法需要在 test 方法后运行(如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们)
@BeforeClass 在 public void 方法加该注释是因为该方法需要在类中所有方法前运行
@AfterClass 在 public void 方法加该注释是因为该方法在所有测试结束后执行。这个可以用来进行清理活动
@Ignore 用来忽略有关不需要执行的测试
4.在 Assert 类中提供的
assertEquals 支持:boolean double float int long Map Object byte[] byte char Coolection等
assertNotEquals 只支持 : float double Object 这三种类型。使用中如果是不支持的数据类型,就会调用 Object 这种类型!
5.运行有两种方法: 1).选中方法,右键,然后run …;
2).点击方法前的小标;