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

Tom*_*Tom 1 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
Run Code Online (Sandbox Code Playgroud)

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

@Configuration
public class MyTestConfig {

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

}
Run Code Online (Sandbox Code Playgroud)

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

干杯汤姆

Mac*_*ski 6

如果你想使用mockito注释和弹簧注入,那么:

1)使用@RunWith(SpringJUnit4ClassRunner.class)

2)创建一个init方法:

@Before
public void init(){
 MockitoAnnotations.initMocks(this);
}
Run Code Online (Sandbox Code Playgroud)