2016-11-09 548 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"})