如何在Spring Boot MockMvc Unit测试中模拟自动连接的依赖项?

Don*_*ert 6 mockito spring-boot

我正在扩展基本的Spring Boot示例,向我的控制器添加"自动连接"存储库依赖项.我想修改单元测试以为该依赖注入Mockito模拟,但我不确定如何.

我原以为我可以这样做:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@WebAppConfiguration
public class ExampleControllerTest {

    private MockMvc mvc;

    @InjectMocks
    ExampleController exampleController;

    @Mock
    ExampleRepository mockExampleRepository;

    @Before
    public void setUp() throws Exception {
      MockitoAnnotations.initMocks(this);
    mvc = MockMvcBuilders.standaloneSetup(new ExampleController()).build();
    }

    @Test
    public void getExamples_initially_shouldReturnEmptyList() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/example").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("[]")));
    }
}
Run Code Online (Sandbox Code Playgroud)

但它并没有将模拟注入到MockMvc.任何人都可以解释如何使用@Autowired依赖项,而不是构造函数参数?

Chr*_* K. 6

请使用@RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringJUnit4ClassRunner.class) 你必须使用ExampleController exampleController;注入的模拟字段而不是创建一个新的mvc = MockMvcBuilders.standaloneSetup(new ExampleController()).build();