@Autowire在单元测试中似乎不起作用

时间:2017-02-28 11:17:15

标签: java spring unit-testing spring-mvc mockito

我使用Mockito和Spring 4进行了单元测试设置。我的测试看起来像这样:

@ContextConfiguration(classes = {
        MyTestConfig.class,
        SecurityConfig.class,
        OAuth2Config.class
})
@RunWith(MockitoJUnitRunner.class)
public class ControllerAccessTests {

    private MockMvc mockMvc;

    @Autowired
    private FilterChainProxy springSecurityFilterChain;

    @Mock
    private CreditCardPaymentService creditCardPaymentService;
    @InjectMocks
    private CreditCardRestController creditCardRestController;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders
                .standaloneSetup(creditCardRestController)
                .apply(springSecurity(springSecurityFilterChain))
                .build();
        when(creditCardPaymentService.doPreAuthPayment(any())).thenReturn(null);
    }

    @Test
    //.... some unit tests

使用如下所示的配置文件:

@Configuration
public class MyTestConfig {

    @Bean
    public FilterChainProxy springSecurityFilterChain(){
        AntPathRequestMatcher matcher = new AntPathRequestMatcher("/**");
        DefaultSecurityFilterChain chain = new DefaultSecurityFilterChain(matcher);
        return new FilterChainProxy(chain);
    }

}

当我启动单元测试springSecurityFilterChain为空时,似乎配置文件MyTestConfig似乎没有被加载。有任何想法吗?

干杯 汤姆

1 个答案:

答案 0 :(得分:6)

如果你想使用mockito注释和弹簧注射:

1)使用@RunWith(SpringJUnit4ClassRunner.class)

2)创建一个init方法:

@Before
public void init(){
 MockitoAnnotations.initMocks(this);
}