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

时间:2016-05-26 06:13:14

标签: spring-boot mockito

我正在扩展基本的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("[]")));
    }
}

但它不会将模拟注入MockMvc。任何人都可以解释如何使用@Autowired依赖项而不是构造函数参数吗?

1 个答案:

答案 0 :(得分:6)

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