@Autowire MockMvc - Spring 数据休息
@Autowire MockMvc - Spring Data Rest
给定存储库
public interface ResourceRepository extends CrudRepository<Resource, Long> { ... }
以下测试代码:
@WebMvcTest
@RunWith(SpringRunner.class)
public class RestResourceTests {
@Autowired
private MockMvc mockMvc;
@Test
public void create_ValidResource_Should201() {
String requestJson = "...";
mockMvc.perform(
post("/resource")
.content(requestJson)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated()); // This fails with 404
}
}
为了解决这个问题,我需要注入 WebApplicationContext
并手动创建 MockMvc
对象,如下所示:
@SpringBootTest
@RunWith(SpringRunner.class)
public class RestResourceTests {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(webApplicationContext).build();
}
有没有更简单的方法来实现这个?
谢谢!
我想出了一个 "clean" 解决方案,但对我来说这就像一个错误。
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc // <-- this is the fix
public class RestResourceTests {
@Autowired
private MockMvc mockMvc; // <-- now injects with repositories wired.
我觉得这是一个错误的原因,@WebMvcTest
注释已经将 @AutoConfigureMockMvc
注释放在 class 正在测试中。
感觉@WebMvcTest
没有在看加载了@RestRepository
的web组件。
给定存储库
public interface ResourceRepository extends CrudRepository<Resource, Long> { ... }
以下测试代码:
@WebMvcTest
@RunWith(SpringRunner.class)
public class RestResourceTests {
@Autowired
private MockMvc mockMvc;
@Test
public void create_ValidResource_Should201() {
String requestJson = "...";
mockMvc.perform(
post("/resource")
.content(requestJson)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated()); // This fails with 404
}
}
为了解决这个问题,我需要注入 WebApplicationContext
并手动创建 MockMvc
对象,如下所示:
@SpringBootTest
@RunWith(SpringRunner.class)
public class RestResourceTests {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(webApplicationContext).build();
}
有没有更简单的方法来实现这个?
谢谢!
我想出了一个 "clean" 解决方案,但对我来说这就像一个错误。
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc // <-- this is the fix
public class RestResourceTests {
@Autowired
private MockMvc mockMvc; // <-- now injects with repositories wired.
我觉得这是一个错误的原因,@WebMvcTest
注释已经将 @AutoConfigureMockMvc
注释放在 class 正在测试中。
感觉@WebMvcTest
没有在看加载了@RestRepository
的web组件。