Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring数据Rest和集成测试_Spring_Spring Mvc_Spring Boot_Spring Data_Spring Data Rest - Fatal编程技术网

Spring数据Rest和集成测试

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

我正在写一些测试来测试我的应用程序。我使用的是SpringBoot2.0.2

想象一下下面的情景 下列实体

@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);