Spring 启动 1.4 - REST API 测试
Spring boot 1.4 - REST API Testing
我想为我的 Spring mvc REST 控制器编写测试。我正在关注 https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4 的官方文档,因此刚刚更新了版本 to 1.4
并按照文档建议添加了 spring 引导。
我添加了以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
和parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
我要测试的 LoginController API 如下所示:
@RequestMapping(value = { "/login" }, method = RequestMethod.GET)
public @ResponseBody ResponseEntity<HashMap<String, Object>> login() {
// some logic to get Customer
return new ResponseEntity<>(customer, HttpStatus.OK);
}
根据文档,这是我的测试:
@RunWith(SpringRunner.class)
@WebMvcTest(LoginController.class)
@SpringBootTest
public class AuthorizationAndAuthenticationTest extends WebSecurityConfigurerAdapter {
@Autowired
private WebApplicationContext webApplicationContext;
private LoginController loginController;
@Autowired
private TestRestTemplate restTemplate;
@MockBean
private LoggingService loggingService;
@Test
public void test() {
given(this.loggingService.logInfoMessage("some Dummy Message", this.getClass())).
this.restTemplate.getForObject("/login", Object.class);
}
}
问题:
1. 由于登录控制器使用了很多服务,我想使用 "given" 来模拟它们,但它给出了编译问题,虽然我不确定,但似乎缺少一些依赖项。
2.TestRestTemplate 已弃用,替代方案是什么?我没有找到任何替代方案。
这是我第一次使用 Spring 框架编写测试,所以我可能忽略了一些细节。
请帮我解决这个问题。
关于问题 #1:您可能在尝试存根 logInfoMessage
:
时忘记了 to call .withReturn
given(this.loggingService.logInfoMessage("some Dummy Message", this.getClass()))
.willReturn("your desired value")
关于问题 #2:org.springframework.boot.test.TestRestTemplate is deprecated in favor of org.springframework.boot.test.web.client.TestRestTemplate。
所以换个包就好了
顺便说一句,最适合测试 Spring MVC 端点的构造是 MockMvc 而不是 TestRestTemplate。
我想为我的 Spring mvc REST 控制器编写测试。我正在关注 https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4 的官方文档,因此刚刚更新了版本 to 1.4
并按照文档建议添加了 spring 引导。
我添加了以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
和parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
我要测试的 LoginController API 如下所示:
@RequestMapping(value = { "/login" }, method = RequestMethod.GET)
public @ResponseBody ResponseEntity<HashMap<String, Object>> login() {
// some logic to get Customer
return new ResponseEntity<>(customer, HttpStatus.OK);
}
根据文档,这是我的测试:
@RunWith(SpringRunner.class)
@WebMvcTest(LoginController.class)
@SpringBootTest
public class AuthorizationAndAuthenticationTest extends WebSecurityConfigurerAdapter {
@Autowired
private WebApplicationContext webApplicationContext;
private LoginController loginController;
@Autowired
private TestRestTemplate restTemplate;
@MockBean
private LoggingService loggingService;
@Test
public void test() {
given(this.loggingService.logInfoMessage("some Dummy Message", this.getClass())).
this.restTemplate.getForObject("/login", Object.class);
}
}
问题: 1. 由于登录控制器使用了很多服务,我想使用 "given" 来模拟它们,但它给出了编译问题,虽然我不确定,但似乎缺少一些依赖项。 2.TestRestTemplate 已弃用,替代方案是什么?我没有找到任何替代方案。
这是我第一次使用 Spring 框架编写测试,所以我可能忽略了一些细节。
请帮我解决这个问题。
关于问题 #1:您可能在尝试存根 logInfoMessage
:
.withReturn
given(this.loggingService.logInfoMessage("some Dummy Message", this.getClass()))
.willReturn("your desired value")
关于问题 #2:org.springframework.boot.test.TestRestTemplate is deprecated in favor of org.springframework.boot.test.web.client.TestRestTemplate。
所以换个包就好了
顺便说一句,最适合测试 Spring MVC 端点的构造是 MockMvc 而不是 TestRestTemplate。