Spring数据Rest和集成测试
我正在写一些测试来测试我的应用程序。我使用的是SpringBoot2.0.2 想象一下下面的情景 下列实体Spring数据Rest和集成测试,spring,spring-mvc,spring-boot,spring-data,spring-data-rest,Spring,Spring Mvc,Spring Boot,Spring Data,Spring Data Rest,我正在写一些测试来测试我的应用程序。我使用的是SpringBoot2.0.2 想象一下下面的情景 下列实体 @Entity public class Board extends BaseEntity { @Column(length = 128) @NotNull private String name; @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy = "boa
@Entity
public class Board extends BaseEntity {
@Column(length = 128)
@NotNull
private String name;
@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy = "board")
private Set<Activity> activities;
... ...
}
问题在于,responseFromTestRestTemplate变量中填充了常用的spring数据rest响应。
相反,在responseFromlockMVC变量内部,主体是空的
我之所以想使用mockMvc解决方案,只是因为从测试的角度来看,mockMvc更有效,但是没有主体是不可能继续的。
使用testRestTemplate的方法只是理解发生了什么的一种尝试
我做错了什么?
谢谢你我猜无论你的控制器在做什么,或者你实体上的约束,都会阻止你两次创建相同的对象 尝试以下更改: 而不是:
Board b = new Board();
b.setName("gianni");
String responseFromTestRestTemplate = testRestTemplate.postForObject("/crud/boards", b, String.class);
做:
您只需通过mockMvc
调用一次POST/crud/boards
import static org.junit.Assert.assertNotNull;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class BoardControllerRestIT {
@Autowired
private TestRestTemplate testRestTemplate;
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@Test
public void testBoardCreation() throws Exception {
Board b = new Board();
b.setName("gianni");
String responseFromTestRestTemplate = testRestTemplate.postForObject("/crud/boards", b, String.class);
assertNotNull(responseFromTestRestTemplate);
ResultActions resultActions = mockMvc.perform(
post("/crud/boards")
.content(objectMapper.writeValueAsString(b))
.contentType(MediaType.APPLICATION_JSON));
resultActions.andExpect(MockMvcResultMatchers.status().is2xxSuccessful());
resultActions.andDo(mvcResult -> {
String responseFromMockMvc = mvcResult.getResponse().getContentAsString();
});
}
}
Board b = new Board();
b.setName("gianni");
String responseFromTestRestTemplate = testRestTemplate.postForObject("/crud/boards", b, String.class);
Board b = new Board();
b.setName("gianni");
String responseFromTestRestTemplate = objectMapper.writeValueAsString(b);