繁体   English   中英

传递对象时的模仿方法

[英]mockito method when passing an object

我试图在Spring / Hibernate中模拟一个DAO方法,该方法接受一个对象并返回一个对象。

Mockito.when(mockedDao.findByProperty(c)).thenReturn(state);

c对象具有键值对,例如“ name”,“ ben”。 state对象将具有就业身份。

但是,当我运行测试时,它返回null。 我认为这是因为尽管它们相等,但我在单元测试中通过的criteria参数并不完全相同。 如何解决此问题? Criteria是一个对象,其键值与休眠条件无关。

这是“ service.getELementByName”:

    @Override
@Transactional
public State getElementByName(Object value) {
    Criteria c = new Criteria();
    c.property = "state_name";
    c.value = (String) value;
    State result = (State) stateDAO.findByProperty(c);
    return result;
}

请提出建议! 谢谢


编辑代码看起来像这样

private State state;

@Mock
private StateDAO mockedDao;
@InjectMocks
private StateServiceImpl service;

@Before
public void init() {
    // mockedDao = mock(StateDAO.class);
    Criteria c = new Criteria();
    c.property = "state_name";
    c.value = (String) "Virginia";
    state = new State();
    state.setId(20);
    state.setIntPtLat(37.5222512);
    state.setIntPtLon(-78.6681938);
    state.setStateName("Virginia");
    Mockito.when(mockedDao.findByProperty(eq(c))).thenReturn(state);
    // service = new StateServiceImpl<State>();
}

@Test
public void testFindByProperty() {

    state = new State();
    state.setId(20);
    state.setIntPtLat(37.5222512);
    state.setIntPtLon(-78.6681938);
    state.setStateName("Virginia");

    Criteria c = new Criteria();
    c.property = "state_name";
    c.value = (String) "Virginia";
    Mockito.when(mockedDao.findByProperty(eq(c))).thenReturn(state);
    service.getElementByName("Virginia");
    State result = (State) service.getElementByName("Tes");
    assertEquals(state, result);
}

如果您需要基于传递给findByPropertyCriteria特定实例添加行为,那么您需要了解Mockito为何认为它不相同的原因-在发布更多代码之前,我们无济于事!

但是,如果不是这种情况,那么任何实例都可以,那么您可以使用参数匹配器稍微放松一下,例如:

Mockito.when(mockedDao.findByProperty(any(Criteria.class))).thenReturn(state);

就像我说的,这取决于您要测试的内容。

希望对您有所帮助。

您在任何地方都调用Mockito.initMocks(this)吗? 如果没有,那可能是您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM