有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个使用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) 个答案

  1. # 1 楼答案

    如果您想使用mockito注释和spring注入,那么:

    1)使用@RunWith(SpringJUnit4ClassRunner.class)

    2)创建一个初始化方法:

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