编译器IDEA
一、注解详解
在测试类上添加
@RunnerWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
这三个注解。
在方法上需要添加的注解及相关功能:
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@Before:在@Test测试方法执行完之前执行该注解指定方法
@Test:测试方法,在这里可以测试期望异常和超时时间
@After:在@Test测试方法执行完之后执行该注解指定方法
@AfterClass:针对所有测试,只执行一次,且必须为static void
@Ignore:执行全部测试方法时,忽略该测试方法(只在测试类的时候生效,单独执行该测试方法无效)
代码如下:
@RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration public class BaseTest { @Before public void before(){ System.out.println("测试开始"); } @After public void after(){ System.out.println("测试结束"); } }
为了避免每个测试类都重复添加注解,所以以上面的那个为基类,其他测试类继承它就行了。
二、打包测试,也就是单独写一个测试类,然后在该测试类上指定要运行的其他所有测试类。
使用方式:
在这个单独的测试类上使用以下注解:
@RunnerWith(Suite.class)
@SuiteClasses({yourClass.class,MyClass.class})
该测试类中不用添加任何方法,直接执行这个测试类,此时会执行SuiteClasses注解所指定的所有测试类(在这里就是yourClass.class,MyClass.class这两个测试类)。
三、测试Controller,模拟浏览器发送请求
使用MockMvc类,这个是spring-boot-test-starter里面的
1,注入WebApplicationContext,代码如下:
@Autowired protected WebApplicationContext wac;
2,在该测试类中加一个MockMvc的字段,代码如下:
protected MockMvc mockMvc;
3,在测试类中的@Before方法内初始化mockMvc,代码如下:
@Before public void before(){ System.out.println("测试开始"); mockMvc= MockMvcBuilders.webAppContextSetup(wac).build(); }
4、接下来就可以在@Test测试方法中使用mockMvc模拟发送请求了。
(1)有如下DTO与controller
@Data @AllArgsConstructor(staticName = "of") @NoArgsConstructor public class FirstDTO { private String name; private String desc; private Integer age; }
@GetMapping("/first") public FirstDTO getDTO(FirstDTO firstDTO){ return firstDTO; }
(2)mockMvc模拟发送请求
@Test public void contextLoads() throws Exception{ MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders .get("/first") .param("name", "周利东") .param("desc", "描述杀") .param("age", "18") ).andReturn(); String response = mvcResult.getResponse().getContentAsString(); System.out.println(response); }
上面得到的返回值和postman的请求是一样的,反正吧mockMvc当成一个HttpClient所发送的请求就行了。
三、测试时数据库事物,即测试数据库不添加进入数据库,测试完毕默认回滚数据
在测试类上添加
@Transactional
在想要自动回滚的方法上添加
@Rollback