2017-02-28 79 views
1

我有使用和的Mockito春4我的測試是這樣一個單元測試設置:@Autowire在單元測試中似乎並沒有工作

@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似乎沒有加載。有任何想法嗎?

乾杯 湯姆

+0

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

回答

6

如果你想使用的Mockito註釋和春天注入則:

1)使用@RunWith(SpringJUnit4ClassRunner.class)

2)創建init方法:

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

好的,謝謝澄清。這是有道理的,我需要春季運動員受益於自動裝配。然而,如果我使用它,我得到一個'java.lang.IllegalStateException:在運行測試時無法加載ApplicationContext'異常。 – Tom

+0

也許是因爲Spring配置創建過程本身的錯誤..完整的堆棧跟蹤是否給出了任何提示可能的原因? –

+0

感謝提示,是的,現在還有一些來自Spring安全性的更不滿意的bean依賴。要調試這個。我會將你的回答標記爲解決方案,因爲它解決了問題,這超出了範圍:)再次感謝解釋! – Tom

相關問題