Java 传递对象时的mockito方法

Java 传递对象时的mockito方法,java,mockito,Java,Mockito,我试图在Spring/Hibernate中模拟一个DAO方法,它接受一个对象并返回一个对象 Mockito.when(mockedDao.findByProperty(c)).thenReturn(state); c对象具有类似“name”、“ben”的键值对状态对象将具有雇用状态 但是当我运行测试时,它返回null。我认为这是因为我在单元测试中传递的标准参数并不完全相同,尽管它们是相等的。我如何解决这个问题?这里的条件是一个键值与hibernate条件无关的对象 下面是“service.ge

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

Mockito.when(mockedDao.findByProperty(c)).thenReturn(state);
c
对象具有类似“name”、“ben”的键值对<代码>状态对象将具有雇用状态

但是当我运行测试时,它返回null。我认为这是因为我在单元测试中传递的
标准
参数并不完全相同,尽管它们是相等的。我如何解决这个问题?这里的条件是一个键值与hibernate条件无关的对象

下面是“service.getELementByName”:

请建议! 谢谢


编辑 代码看起来像这样

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);
}
私人国家;
@嘲弄
私营部门;
@注射模拟
私有StateServiceImpl服务;
@以前
公共void init(){
//mockedDao=mock(StateDAO.class);
标准c=新标准();
c、 property=“state\u name”;
c、 值=(字符串)“Virginia”;
状态=新状态();
state.setId(20);
state.setIntPtLat(37.5222512);
state.setIntPtLon(-78.6681938);
州名称(“弗吉尼亚”);
Mockito.when(mockedDao.findByProperty(等式(c))。然后返回(状态);
//服务=新的StateServiceImpl();
}
@试验
公共void testFindByProperty(){
状态=新状态();
state.setId(20);
state.setIntPtLat(37.5222512);
state.setIntPtLon(-78.6681938);
州名称(“弗吉尼亚”);
标准c=新标准();
c、 property=“state\u name”;
c、 值=(字符串)“Virginia”;
Mockito.when(mockedDao.findByProperty(等式(c))。然后返回(状态);
service.getElementByName(“弗吉尼亚”);
状态结果=(状态)服务.getElementByName(“Tes”);
资产质量(状态、结果);
}

如果您需要根据传递给
findByProperty
标准的特定实例添加行为,那么您需要弄清为什么Mockito不认为这是相同的-除非发布更多代码,否则我们无法帮上忙

但是,如果情况并非如此,任何实例都可以,那么您可以使用参数匹配器稍微放松一些,例如:

Mockito.when(mockedDao.findByProperty(any(Criteria.class))).thenReturn(state);
就像我说的,这取决于你在测试什么


我希望这会有所帮助。

如果您需要根据传递给
findByProperty
标准的特定实例添加行为,那么您需要弄清为什么Mockito不认为这是相同的-除非发布更多代码,否则我们无法提供帮助

但是,如果情况并非如此,任何实例都可以,那么您可以使用参数匹配器稍微放松一些,例如:

Mockito.when(mockedDao.findByProperty(any(Criteria.class))).thenReturn(state);
就像我说的,这取决于你在测试什么


我希望这能有所帮助。

你在哪里给Mockito.initMocks打电话?如果没有,那可能是您的问题。

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

需要更多代码。“接触”对象看起来像什么?另外,你应该回顾你以前的问题,如果可以的话,接受一些答案。更多的代码肯定会有帮助!它的标准…我更新了code@user1827614可以将您的
标准
对象添加到问题中吗?(我假设它不可能是
org.hibernate.Criteria
)你能发布“service.getElementByName”的代码吗?Criterias类是否实现了equals方法?如何在getElementByName方法中实例化Criteria实例?需要更多代码。“接触”对象看起来像什么?另外,你应该回顾你以前的问题,如果可以的话,接受一些答案。更多的代码肯定会有帮助!它的标准…我更新了code@user1827614可以将您的
标准
对象添加到问题中吗?(我假设它不可能是
org.hibernate.Criteria
)你能发布“service.getElementByName”的代码吗?Criterias类是否实现了equals方法?如何在getElementByName方法中实例化Criteria实例?添加此..MockitoAnnotations.initMocks(此)是正确的;和Mockito.when(mockedDao.findByProperty(any(Criteria.class)),然后返回(state);修正了这个问题。谢谢添加此..MockitoAnnotations.initMocks(this)是正确的;和Mockito.when(mockedDao.findByProperty(any(Criteria.class)),然后返回(state);修正了这个问题。谢谢