单元测试–测试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。
 
单次测试添加图书:

多次测试添加图书:
涉及到注解:
 1、@ParameterizedTest 表示这个测试是参数化测试,junit5 才有的注解
 //允许测试方法使用参数进行测试,
 和注解 @CsvSource 一起使用,@CsvSource注解用来写参数数据
2、@CsvSource({“书籍A,100,ljh”,“书籍B,110,ljh”,“书籍C,120,ljh”})
 //参数是一个数组,数组里面的每一个元素就是方法的参数,每个元素里面的多个参数用逗号隔开
 
测试查询方法

测试删除
涉及的注解:
 @ParameterizedTest //表明这个测试方法属于参数测试
 @ValueSource(ints = {76, 77, 78}) //具体参数
 



















