【问题标题】:Mockito: combine @Autowired and @MockMockito:结合 @Autowired 和 @Mock
【发布时间】:2016-11-09 14:40:08
【问题描述】:

我在 Spring Web 模型-视图-控制器 (MVC) 框架应用程序中使用 Mockito(在 MIT 许可下发布的 Java 开源测试框架)进行了这个 junit 测试

我有这个测试:

@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 为空

【问题讨论】:

  • 为什么不是null

标签: java unit-testing spring-mvc mockito powermockito


【解决方案1】:

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

然后在@Before 方法中,您可以通过调用MockitoAnnotations.initMocks(this); 来初始化Mockito 模拟

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

@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));
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 2013-10-10
    • 2015-04-02
    • 2014-09-14
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多