春季最高

通过参考,使用Spring 5和Spring Boot 2开始学习的春天课程:

>>学习春天
休息顶部

通过参考,使用Spring 5和Spring Boot 2开始学习的春天课程:

>>看看这个课程

1.概述

在本教程中,我们将讨论如何使用休息休息的休息服务,专注于从我们的REST API捕获并验证响应数据

2.设置测试类

在之前的教程中,我们已经探索了放心一般,我们演示了如何操作请求标题,饼干和参数

在现有设置的基础上,我们添加了一个简单的REST控制器,有一个,内部打电话给服务,AppService。我们将在我们的测试示例中使用这些类。

为了创建我们的测试类,我们需要做更多的设置。因为我们有spring-boot-starter-test在我们的类路径中,我们可以轻松地利用Spring测试工具。

首先,让我们创建AppControllerIntegrationTest班级:

@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = webEnvironment . random_port) public class AppControllerIntegrationTest {@LocalServerPort private int port;私人uri字符串;@PostConstruct public void init() {uri = "http://localhost:" +端口;} @MockBean AppService AppService;/ /测试用例}

在这个JUnit测试中,我们用一些特定于spring的注释来注释我们的类,这些注释在一个随机的可用端口中本地启动应用程序。在@PostConstruct.,我们捕获了完整的URI,我们将在其上进行REST调用。

我们也使用@MockBean.AppService,我们需要在此类上呼叫mock方法。

3.验证JSON响应

JSON是REST API中用于交换数据的最常用格式。响应可以由单个JSON对象或JSON对象数组组成。我们将在本节中看看。

3.1。一个JSON对象

假设我们需要测试/电影/ {id}终点,返回a电影JSON对象,如果id是发现。

我们将模拟AppService调用以返回一些模拟数据Mockito.框架:

@test public void给gendmovieid_whenmakegetrequesttomovieendpoint_thenreturnmovie(){电影testmovie =新电影(1,“movie1”,“summary1”);什么时候(appservice.findmovie(1))。然后return(testmovie);get(Uri +“/ movie /”+ testmovie.getID())。然后().astrathat().statuscode(httpstatus.ok.value()).body(“id”,等于(testmovie.getId())).body(“名称”,等于(testmovie.getname())).body(“synopsis”,notnullvalue());}

上面,我们先嘲笑一下appservice.findmovie(1)呼叫返回一个对象。然后,我们构建了我们的REST URL得到()通过休息提供的方法,以便获得请求。最后,我们做了四次断言。

第一的,我们检查了响应状态代码,然后检查身体元素。我们正在使用哈克斯特断言期望的值。

另请注意,如果响应JSON嵌套,我们可以通过使用嵌套键操作员喜欢“key1.key2.key3”

3.2。验证后提取JSON响应

在某些情况下,我们可能需要在验证后提取响应,以对其执行其他操作。

我们可以使用该类提取对类的JSON响应提取()方法:

电影结果= get(uri +“/电影/”+ testMovie.getId()).then() .assertThat() .statusCode(HttpStatus.OK.value()) .extract() .as(电影类);为了(结果).isEqualTo (testMovie);

在此示例中,我们休息休息,以解压缩JSON响应电影对象,然后在提取的对象上断言。

我们也可以提取a的整个响应字符串,使用extract()。asstring()API:

String responseString = get(uri + "/movie/" + testMovie.getId()).then() .assertThat() .statusCode(HttpStatus.OK.value()) .extract() .asString();为了(responseString) .isNotEmpty ();

最后,我们也可以在响应JSON中提取特定领域

让我们看一个POST API的测试,它期望电影JSON体,如果插入成功将返回相同的:

@test public void给gendie_whenmakespostrequeesttomovieendpoint_thengorrect(){map 请求= new hashmap <>();Request.put(“ID”,“11”);Request.put(“名称”,“Movie1”);Request.put(“synopsis”,“摘要1”);int movieid =给定()。contentType(“application / json”).body(请求).when().post(uri +“/ movie”).then().asterthat().statuscode(httpstatus.created.value。()).Extract().path(“ID”);assertthat(moviled).isequalto(11);}

以上,我们首先提出了我们需要发布的请求对象。然后我们提取id属性返回的JSON响应路径()方法。

3.3。JSON阵列

如果响应是JSON数组,我们也可以验证它:

@Test public void whenCallingMoviesEndpoint_thenReturnAllMovies() {Set movieSet = new HashSet<>();movieSet。添加(new Movie(1, "movie1", "summary1"));movieSet。添加(new Movie(2, "movie2", "summary2"));当(appService.getAll ()) .thenReturn (movieSet);get(uri + "/movies").then() .statusCode(HttpStatus.OK.value()) .assertThat() .body("size()", is(2));}

我们再次首先嘲笑appservice.getall()使用一些数据并向我们的端点发出请求。然后我们断言statuscode.尺寸我们的响应阵列。

这可以通过提取来完成:

电影[]动画= get(Uri +“/ movies”)。然后().statuscode(200).extract().as(电影[]。类);assertthat(电影.Length).isequalto(2);

4.验证标题和饼干

我们可以使用具有相同名称的方法验证响应的标题或cookie:

@test公共void whencallingwelcomeendpoint_thencorrect(){get(uri +“/ welcome”)。然后().asterthat().header(“sessionId”,notnullvalue()).cookie(“令牌”,notnullvalue());}

我们也可以分别提取头文件和cookie:

响应响应= get(uri +“/ welcome”);字符串头部= responst.getheader(“sessionId”);字符串cookievalue = response.getCookie(“令牌”);asserthat(头部).isnotblank();assertthat(cookievalue).isnotblank();

5.验证文件

如果我们的REST API返回文件,我们可以使用asbytearray()提取响应的方法:

文件文件= new classpathresource(“test.txt”)。getfile();long filesize = file.length();什么时候(appservice.getfile(1))。然后return(文件);byte []结果= get(uri +“/ download / 1”)。AsbyteArray();assertthat(结果.Length).isequalto(文件化);

在这里,我们首先嘲笑appservice.getfile(1)返回存在于src /测试/资源小路。然后我们拨打了我们的终点并提取了一个响应字节[],我们随后被声称有预期的价值。

6.结论

在本教程中,我们使用休息保证,查看了从我们的REST API捕获和验证响应的不同方式。

像往常一样,本文中的代码可用在Github

弹簧底部

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>课程
休息底部

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>看看这个课程
评论在本文上关闭!