2017-05-30 118 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请检查附加的代码 –

回答