2016-11-09 551 views
0

我有一个春天的Web模型 - 视图 - 控制器使用的Mockito(Java的MIT许可下发布的开源测试框架)这个JUnit测试(MVC)框架应用的Mockito:结合@Autowired和@Mock

我有这样的测试:

@RunWith(MockitoJUnitRunner.class) 
public class DeviceCatalogueControllerTest { 


    @InjectMocks 
    private DeviceCatalogueController controller; 

    @InjectMocks 
    protected SessionHelper sessionHelper; 

    @Mock 
    private MessageSource messageSource; 

    @Mock 
    protected CataloqueService cataloqueService; 

    @Autowired 
    protected ApplicationDao applicationDao; 

    @Before 
    public void setUpTest() { 
     request = new MockHttpServletRequest(); 
     response = new MockHttpServletResponse(); 
    } 

    @Test 
    public void testInitFormGet() throws Exception { 

     System.out.println ("SessionHelper sessionHelper --> " + sessionHelper); 

     //controller.initFormGet(searchForm, localeParam, request, response, model, locale) 
     controller.initFormGet(null, DEFAULT_LOCALE, request, response, null, new Locale(DEFAULT_LOCALE)); 
     } 

但在运行测试时,applicationDao是空

+0

为什么不是'null'? –

回答

1

您的测试类是完全没有意识到Spring的。要在单元测试中使用Spring,您必须使用正确的注释@RunWith(SpringJUnit4ClassRunner.class)而不是您现在使用的@RunWith(MockitoJUnitRunner.class)

然后在@Before方法,你可以通过调用初始化Mockito嘲弄MockitoAnnotations.initMocks(this);

您的测试类可以被重新编码为:

@ContextConfiguration(locations = {"classpath:/application-context.xml"}) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class DeviceCatalogueControllerTest { 


    @InjectMocks 
    private DeviceCatalogueController controller; 

    @InjectMocks 
    protected SessionHelper sessionHelper; 

    @Mock 
    private MessageSource messageSource; 

    @Mock 
    protected CataloqueService cataloqueService; 

    @Autowired 
    protected ApplicationDao applicationDao; 

    @Before 
    public void setUpTest() { 
     MockitoAnnotations.initMocks(this); 
     request = new MockHttpServletRequest(); 
     response = new MockHttpServletResponse(); 
    } 

    @Test 
    public void testInitFormGet() throws Exception { 

     System.out.println("SessionHelper sessionHelper --> " + sessionHelper); 

     //controller.initFormGet(searchForm, localeParam, request, response, model, locale) 
     controller.initFormGet(null, DEFAULT_LOCALE, request, response, null, new Locale(DEFAULT_LOCALE)); 
    } 
} 

注:使用正确的XML路径为您application-context.xml@ContextConfiguration(locations = {"classpath:/application-context.xml"})