@RunWith(SpringRunner.class) @WebMvcTest(MultiplicationController.class) //区别于springbootttest.上面这个注解只加载控制器 public class MultiplicationControllerTest { //测试的控制器中有autowired注解。需要模拟一个bean。 //如果使用mock注解的话,需要通过mokito初始化一下。并且由于不是直接装配到上下文中, //需要通过构造函数传入。具体看v2 @MockBean private MultiplicationService multiplicationService; //模拟http请求,用来测试控制器 @Autowired private MockMvc mvc; // This object will be magically initialized by the initFields method below. private JacksonTester<Multiplication> json; @Before public void setup() { JacksonTester.initFields(this, new ObjectMapper()); } @Test public void getRandomMultiplicationTest() throws Exception{ // given given(multiplicationService.createRandomMultiplication()) .willReturn(new Multiplication(70, 20)); // when MockHttpServletResponse response = mvc.perform( get("/multiplications/random") .accept(MediaType.APPLICATION_JSON)) .andReturn().getResponse(); // then assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); assertThat(response.getContentAsString()) .isEqualTo(json.write(new Multiplication(70, 20)).getJson()); } }这段代码中,json对象的作用是什么
时间: 2024-04-14 20:26:31 浏览: 29
在上述代码中,`json`对象的作用是用于对JSON数据进行序列化和反序列化,并进行断言验证。
`JacksonTester`是Spring Boot提供的一个工具类,用于初始化和配置Jackson JSON序列化器和反序列化器。通过调用`JacksonTester.initFields(this, new ObjectMapper())`方法,我们可以将`json`对象初始化为一个`JacksonTester<Multiplication>`实例。
在测试方法中,我们可以使用`json`对象对JSON字符串进行断言验证。例如,在给定的测试用例中,我们通过调用`json.write(new Multiplication(70, 20)).getJson()`方法将`Multiplication(70, 20)`对象序列化为JSON字符串。然后,我们可以使用断言来验证响应的内容是否与期望的JSON字符串相等。
```java
assertThat(response.getContentAsString())
.isEqualTo(json.write(new Multiplication(70, 20)).getJson());
```
通过使用`json`对象,我们可以方便地进行JSON数据的序列化和反序列化,并在测试中对JSON内容进行断言验证,以确保控制器返回的响应与预期的JSON数据一致。
总之,`json`对象的作用是进行JSON数据的序列化和反序列化,并在测试中进行断言验证。
相关问题
@WebMvcTest(MultiplicationController.class)什么时候需要使用这个注解,举例说明
`@WebMvcTest(MultiplicationController.class)` 是Spring Boot提供的测试注解之一,用于测试MVC控制器的单元测试。这个注解通常在以下情况下使用:
1. 单元测试控制器逻辑:当你希望仅测试控制器层面的逻辑,而不需要启动整个应用程序或涉及其他组件(如服务、存储库等)时,可以使用`@WebMvcTest`注解。
2. Mock MVC测试:`@WebMvcTest`注解会启动一个Mock MVC环境,模拟HTTP请求和响应,使你能够针对控制器的行为进行测试。这样你可以通过发送模拟请求并验证响应结果来测试控制器的行为。
举个例子来说明,假设我们有一个`MultiplicationController`控制器,用于处理数学乘法相关的请求。我们希望对该控制器进行单元测试,可以使用`@WebMvcTest(MultiplicationController.class)`注解。这样就可以在不涉及其他组件的情况下测试该控制器的行为。
```java
@RunWith(SpringRunner.class)
@WebMvcTest(MultiplicationController.class)
public class MultiplicationControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testMultiply() throws Exception {
mockMvc.perform(get("/multiply")
.param("operand1", "2")
.param("operand2", "3"))
.andExpect(status().isOk())
.andExpect(content().string("6"));
}
}
```
在上面的例子中,我们使用`@WebMvcTest(MultiplicationController.class)`注解来测试`MultiplicationController`的`multiply()`方法。通过使用`MockMvc`对象发送GET请求,并验证响应结果是否符合预期,以此测试控制器的行为。
总之,`@WebMvcTest(MultiplicationController.class)`注解适用于仅测试MVC控制器逻辑的单元测试场景,它提供了一个Mock MVC环境来模拟HTTP请求和响应。
@RunWith(SpringRunner.class) 里面参数详解
`@RunWith` 是 JUnit 提供的注解,用于指定测试类的运行器,常用的运行器有 `SpringRunner.class`。
`SpringRunner` 是 Spring 提供的 JUnit4 的运行器,它会在测试开始的时候自动创建 Spring 的应用上下文,并将被测试类中的 `@Autowired` 注解的依赖自动注入进去。同时,它还支持其他 Spring 相关的注解,比如 `@Transactional`、`@ContextConfiguration` 等。
在使用 `@RunWith(SpringRunner.class)` 的时候,需要保证项目中已经引入了 Spring Test 相关的依赖,比如:
```xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
```
同时,还需要在测试类上面添加 `@SpringBootTest` 注解,用于指定 Spring Boot 的启动类。
```java
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class SampleTest {
}
```
其中,`classes` 参数指定 Spring Boot 的启动类,可以是一个带有 `@SpringBootApplication` 注解的类,也可以是一个配置类。
总之,`@RunWith(SpringRunner.class)` 的作用就是让测试类在 Spring 环境下运行,并能够自动注入依赖。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)