鉴于存储库
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();
}
有没有更简单的方法来实现这个目标?
谢谢!
答案 0 :(得分:4)
我想出了一个“干净”的解决方案,但这对我来说感觉就像一个错误。
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc // <-- this is the fix
public class RestResourceTests {
@Autowired
private MockMvc mockMvc; // <-- now injects with repositories wired.
我认为这是一个错误的原因,@WebMvcTest
注释已经将@AutoConfigureMockMvc
注释放在被测试的类上。
感觉@WebMvcTest
没有查看加载了@RestRepository
的网络组件。