7、单元测试--测试RestFul 接口

单元测试–测试RestFul 接口

– 测试用例类使用@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)修饰。
– 测试用例类会接收容器依赖注入TestRestTemplate这个实例变量。
– 测试方法可通过TestRestTemplate来调用RESTful接口的方法。

测试用例应该定义在和被测试类位于同一个包位置。


// 测试用例的位置要和被测试的位于同一个包路径位置。
//参数webEnvironment web环境,RANDOM_PORT表示随机端口
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class BookControllerTest {

    //测试用例类会接收容器依赖注入TestRestTemplate这个实例变量
    @Autowired
    private TestRestTemplate testRestTemplate;
    
    //注意点:测试的时候,对应的方法的参数列表要加上注解@RequestBody,不然这个book实体传到方法那边,方法无法接收,会变成null。
    
    //单次测试
    @Test
    public void testAddBookRestful(){
        //生成测试数据
        Book book = new Book("mysql", new BigDecimal(100), "ljh");
        //参数1:访问的路径,参数2:测试的数据,参数3:获取服务器响应的数据类型,就是方法的返回值类型
        Book b = testRestTemplate.postForObject("/books", book, Book.class);
        //断言 参数1:期望值 , 参数2:实际值
        Assertions.assertEquals("mysql",b.getName());
        Assertions.assertEquals(BigDecimal.valueOf(100),b.getPrice());
        Assertions.assertEquals("ljh",b.getAuthor());
    }

    //参数化测试,可以让方法进行多次测试
    @ParameterizedTest //允许测试方法接收参数进行测试,和注解 @CsvSource 一起使用,@CsvSource注解用来写参数数据
    //参数是一个数组,数组里面的每一个元素就是方法的参数
    @CsvSource({"书籍A,100,ljh","书籍B,110,ljh","书籍C,120,ljh"})
    public void testAddBookRestful02(String name,BigDecimal price,String author){
        //生成测试数据
        Book book = new Book(name, price, author);
        //测试
        Book b = testRestTemplate.postForObject("/books", book, Book.class);
        //断言
        Assertions.assertEquals(name,b.getName());
        Assertions.assertEquals(price,b.getPrice());
        Assertions.assertEquals(author,b.getAuthor());
    }
}

解释:
注意点1:
涉及注解:@RequestBody
测试的时候,被测试的方法的参数列表要加上注解@RequestBody,不然这个book实体传到被测试方法那边,方法的参数无法接收,会变成null。
7、单元测试--测试RestFul 接口_第1张图片

单次测试添加图书:

7、单元测试--测试RestFul 接口_第2张图片

多次测试添加图书:

涉及到注解:
1、@ParameterizedTest 表示这个测试是参数化测试,junit5 才有的注解
//允许测试方法使用参数进行测试,
和注解 @CsvSource 一起使用,@CsvSource注解用来写参数数据

2、@CsvSource({“书籍A,100,ljh”,“书籍B,110,ljh”,“书籍C,120,ljh”})
//参数是一个数组,数组里面的每一个元素就是方法的参数,每个元素里面的多个参数用逗号隔开
7、单元测试--测试RestFul 接口_第3张图片

测试查询方法

7、单元测试--测试RestFul 接口_第4张图片

测试删除

涉及的注解:
@ParameterizedTest //表明这个测试方法属于参数测试
@ValueSource(ints = {76, 77, 78}) //具体参数
7、单元测试--测试RestFul 接口_第5张图片

你可能感兴趣的:(springboot,单元测试,restful,后端,spring,boot)