2017-05-30 55 views
0

當使用mockito來單元測試Spring mvc控制器時,如何注入dao圖層對象。使用SpringJUnit4ClassRunner類時,它始終會使用@Spy註釋提供空指針異常。使用mockito彈出mvc單元測試控制器注入dao對象

示例代碼:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:**/evivecare-application-context-test.xml" }) 
@WithMockUser(username = "admin", roles={"ADMIN"}) 
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class}) 
public class ControllerTest { 

    private MockMvc mockMvc; 
    @Mock 
    private SessionFactory sessionFactory; 
    @Mock 
    private Session session; 
    @InjectMocks 
    private FilterController filterController = new FilterController(); 
    @Spy 
    private FilterService filterService= new FilterServiceImpl(); 
    @Autowired 
    private FilterDAO filterDAO; 
    @Mock 
    private OperatorService userService; 
    @Mock 
    private EviveSpeechFilterService eviveSpeechFilterService; 
    private TestContextManager testContextManager; 



    @Before 
    public void setup() throws Exception { 
     // Process mock annotations 
     MockitoAnnotations.initMocks(this); 

     // Setup Spring test in standalone mode 
     this.mockMvc = MockMvcBuilders.standaloneSetup(filterController).build(); 
     testContextManager = new TestContextManager(getClass()); 
     testContextManager.prepareTestInstance(this); 

     filterDAO= new FilterDAOImpl(sessionFactory); 
     Mockito.doReturn(session).when(sessionFactory).getCurrentSession(); 
    } 

@Test 
    public void testController200() throws Exception{ 
     Mockito.when(filterService.renameList("123","sdfgh")).thenReturn(false); 
     Mockito.when(filterDAO.renameList("123","sdfgh")).thenReturn(false); 
     this.mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post("/renameList") 
       .sessionAttr("filterService", filterService) 
       .sessionAttr("filterDAO", filterDAO) 
       .param("listId", "1234567") 
       .param("alternateName", "LIst Name")) 
     .andExpect(org.springframework.test.web.servlet.result.MockMvcResultMatchers.status().isOk()); 
    } 
} 

在這個測試的情況下,又將filterService調用filterDAO,它總是返回null pointer exception。 那麼,我能做些什麼來解決這個問題?

+0

請張貼一些代碼樣本。另外你爲什麼使用'@ Spy'而不是'@ Mock'? –

+0

@SergheyBishyr請檢查附加的代碼 –

回答