@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 21:26:31 浏览: 170
在上述代码中,`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请求和响应。
阅读全文