【问题标题】:@Autowire in unit tests does not seem to work单元测试中的@Autowire 似乎不起作用
【发布时间】:2017-02-28 11:17:15
【问题描述】:

我有一个使用 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 似乎没有被加载。有任何想法吗?

干杯 汤姆

【问题讨论】:

  • 使用@RunWith(SpringJUnit4ClassRunner.class) 而不是@RunWith(MockitoJUnitRunner.class)

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


【解决方案1】:

如果你想使用mockito注解和spring注入那么:

1) 使用@RunWith(SpringJUnit4ClassRunner.class)

2)创建一个init方法:

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

【讨论】:

  • 好的,感谢您澄清这一点。我需要 Spring runner 从自动装配中受益是有道理的。但是,如果我使用它,我会在运行测试时得到 java.lang.IllegalStateException: Failed to load ApplicationContext 异常。
  • 可能是因为 Spring 配置创建过程本身内部的错误。完整的堆栈跟踪是否提供任何提示可能是什么原因?
  • 啊,谢谢你的提示,是的,spring security 现在还有一些不满意的 bean 依赖项。要调试这个。我会将您的回复标记为解决方案,因为它解决了问题,这超出了范围:) 再次感谢您的解释!
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2019-06-25
  • 1970-01-01
  • 2012-05-25
  • 2013-11-01
相关资源
最近更新 更多