springboot的测试

编译器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

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/85003956
今日推荐