我在使用Mockito創建測試時遇到了一些麻煩。在與Eclipse的調試,我從Restrictions.eq
得到了null
,我做的每一步創建一個靜態模擬到Restrictions
:如何使用Mockito模擬Restriction.eq()
@RunWith(PowerMockRunner.class)
@PrepareForTest({ RequisicaoList.class, StatusMessages.class,
FacesMessages.class, Restrictions.class })
public class RequisicaoListTest {
...
@SuppressWarnings("unchecked")
public String criteriaContigencia() {
Criteria criteria = criarCriteria(Requisicao.class);
criteria.createAlias("produto", "prod");
criteria.add(Restrictions.eq("prod.ar",arSelecionada));
if (getExemplo().getNrProtocolo() != null)
criteria.add(Restrictions.eq("nrProtocolo", getExemplo()
.getNrProtocolo()));
situacoesPesquisa.clear();
situacoesPesquisa.add(SituacaoRequisicao.PENDENTE_PAGAMENTO);
situacoesPesquisa.add(SituacaoRequisicao.PENDENTE_AGENDAMENTO);
if (!situacoesPesquisa.isEmpty()) {
criteria.add(Restrictions.in("situacao", situacoesPesquisa));
}
if (getExemplo().getResponsavel() != null && StringUtils.isNotBlank(getExemplo().getResponsavel().getCpf())) {
criteria = criteria.createCriteria("responsavel");
criteria = criteria.add(Restrictions.eq("cpf", getExemplo().getResponsavel().getCpf()));
}
resultado = Collections.checkedList(criteria.list(),Requisicao.class);
return null;
}
我的代碼與持久層混合managedBean,我不能改變這種狀況,但我必須創建測試該項目。
這裏的問題是嘲笑
Restrictions.eq("cpf", getExemplo().getResponsavel().getCpf())
,因爲連我自己:
SimpleExpression simpleExpressionEq = mock(SimpleExpression.class);
PowerMockito.mockStatic(Restrictions.class);
when(Restrictions.eq("cpf", "00000000091")).thenReturn(simpleExpressionEq);
然後我仍然得到來自Restriction.eq
null
回報,甚至傳遞specting值。但在調試期間,如果我在表達視圖中表達這樣做的:
Restrictions.eq("cpf", "00000000091"))
它工作正常,並返回一個嘲笑SimpleExpression
嘿,這是我的錯,我抱怨一些依賴,所以我改變了代碼,但無法編譯和運行舊代碼。 – LottaLava 2012-03-21 13:34:08
那麼,你們都修好了嗎? – jhericks 2012-03-21 15:46:42
當然,它的一切正常,感謝您的幫助。 – LottaLava 2012-03-21 17:37:48