我试图在Spring / Hibernate中模拟一个DAO方法,该方法接受一个对象并返回一个对象。
Mockito.when(mockedDao.findByProperty(c)).thenReturn(state);
c
对象具有键名值对,如“name”,“ben”。 state
对象将具有就业状态。
但是当我运行测试时它返回null。我认为这是因为我在单元测试中传递的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);
}
答案 0 :(得分:3)
如果您需要根据传递给Criteria
的{{1}}特定实例添加行为,那么您需要了解Mockito认为不一样的原因 - 直到更多代码发布我们无法帮助!
但是,如果情况并非如此,并且任何实例都会这样做,那么您可以使用参数匹配器来放松一些事情,例如:
findByProperty
就像我说的那样,这取决于你正在测试的东西。
我希望有所帮助。
答案 1 :(得分:2)
你在任何地方打电话给Mockito.initMocks(这个)吗?如果没有,那可能是你的问题。