0

オブジェクトを受け取ってオブジェクトを返す Spring/Hibernate の DAO メソッドをモックしようとしています。

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

cオブジェクトには、「名前」、「ベン」などのキーと値のペアがあります。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);
}
4

2 に答える 2

3

Criteria渡された特定のインスタンスに基づいて動作を追加する必要がある場合findByPropertyは、Mockito が同じであると判断しない理由を突き止める必要があります。さらに多くのコードが投稿されるまで、私たちは助けられません!

ただし、それが当てはまらず、どのインスタンスでも実行できる場合は、引数マッチャーを使用して少し緩和することができます。次に例を示します。

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

私が言ったように、それはあなたがテストしているものに依存します。

それが役立つことを願っています。

于 2013-01-08T14:32:39.750 に答える
2

どこでも Mockito.initMocks(this) を呼び出していますか? そうでない場合は、それが問題かもしれません。

于 2013-01-08T15:07:35.420 に答える