我正在尝试测试服务,这是一段代码:
@Test
public void comprovarCercaBuuida(){
/*Objecte que contindrà l'info de la cerca*/
DeuteBackBean deuteBB;
List<IDeute> respostaDeutesExe = new ArrayList<IDeute>();
List<IDeute> respostaDeutesVol = new ArrayList<IDeute>();
List<IDeute> respostaDeutesTots = new ArrayList<IDeute>();
/*tot els paràmetres del servei s'han de passar com a mockito!!!*/
Mockito.when(serveiGpt.obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT),Mockito.eq(E_TIPUS_DEUTE_HIS),Mockito.eq(PERIODE_DEUTE_EXE))).thenReturn(respostaDeutesExe);
Mockito.verify(serveiGpt,Mockito.atLeastOnce()).obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT), Mockito.eq(E_TIPUS_DEUTE_HIS), Mockito.eq(PERIODE_DEUTE_EXE));
Mockito.when(serveiGpt.obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT),Mockito.eq(E_TIPUS_DEUTE_HIS),Mockito.eq(PERIODE_DEUTE_VOL))).thenReturn(respostaDeutesVol);
//Mockito.verify(serveiPersones,Mockito.atLeastOnce()).cercarPersones(Mockito.eq(PATRO_CERCA_AMB_RESULTATS), Mockito.any(IPager.class));
Mockito.when(serveiGpt.obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT),Mockito.eq(E_TIPUS_DEUTE_HIS),Mockito.eq(PERIODE_DEUTE_TOTS))).thenReturn(respostaDeutesTots);
//Mockito.verify(serveiPersones,Mockito.atLeastOnce()).cercarPersones(Mockito.eq(PATRO_CERCA_AMB_RESULTATS), Mockito.any(IPager.class));
}
但是我发现了maven的这个例外: Ť
ests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.998 sec <<< FAILURE!
comprovarCercaBuuida(cat.base.gpt.ui.ConsultaDeutesTest) Time elapsed: 0.078 sec <<< FAILURE!
Wanted but not invoked:
iGptService.obtenirDeutes(
cat.base.tip.domini.impl.ClauSubjecte@1f,
HISTORIC,
EXECUTIVA
);
-> at cat.base.gpt.ui.ConsultaDeutesTest.comprovarCercaBuuida(ConsultaDeutesTest.java:114)
Actually, there were zero interactions with this mock.
at cat.base.gpt.ui.ConsultaDeutesTest.comprovarCercaBuuida(ConsultaDeutesTest.java:114)
我真的不明白我做错了什么。
代码@beforMethod
@BeforeMethod
public void prepararDadesResposta(){
IDeute dExe, dVol;
context = new MockExternalContext();
respostaDeutesExe = Collections.synchronizedList(new ArrayList<IDeute>());
respostaDeutesVol = Collections.synchronizedList(new ArrayList<IDeute>());
respostaDeutesTots = Collections.synchronizedList(new ArrayList<IDeute>());
long start = System.currentTimeMillis();
long end = start + 1000;
while (System.currentTimeMillis() < end){
dExe = new Deute();
dExe.setAdrecaCompletaCom("Això és un prova.");
dExe.setAdrecaCompletaTrib("Això és un prova.");
dExe.setCarrerTrib("Això és un prova.");
dExe.setCasaTrib("Això és un prova.");
dExe.setClauDeute(null);
dExe.setClauObjecte("clauObjecte");
dExe.setDataTerminiFi(new Date());
dExe.setDataTerminiIni(new Date());
dExe.setDesEns("descripcioEns");
dExe.setDesExp("descripcióExp");
dExe.setDesTribEn("english");
dExe.setDesTribEs("spanish");
dExe.setDesTributCa("catalan");
dExe.setEscalaTrib("escalaTrib");
dExe.setIdEns(null);
dExe.setImportTotal(new Double(0.0));
dExe.setNifSubjecte("nifSubjecte");
dExe.setNomSubjecteRaoSocial("nomSubjecteRaoSocial");
dExe.setPeriodeDeute(EPeriodeDeute.EXECUTIVA);
dExe.setPisTrib("pisTrib");
dExe.setPortaTrib("portaTrib");
dExe.setRefCadastral("refCadastral");
dExe.setSgTrib("sgTrib");
dExe.setSituacioDeute(null);
dExe.setTipusDeute(ETipusDeute.HISTORIC);
dVol = new Deute();
dVol.setAdrecaCompletaCom("Això és un prova.");
dVol.setAdrecaCompletaTrib("Això és un prova.");
dVol.setCarrerTrib("Això és un prova.");
dVol.setCasaTrib("Això és un prova.");
dVol.setClauDeute(null);
dVol.setClauObjecte("clauObjecte");
dVol.setDataTerminiFi(new Date());
dVol.setDataTerminiIni(new Date());
dVol.setDesEns("descripcioEns");
dVol.setDesExp("descripcióExp");
dVol.setDesTribEn("english");
dVol.setDesTribEs("spanish");
dVol.setDesTributCa("catalan");
dVol.setEscalaTrib("escalaTrib");
dVol.setIdEns(null);
dVol.setImportTotal(new Double(0.0));
dVol.setNifSubjecte("nifSubjecte");
dVol.setNomSubjecteRaoSocial("nomSubjecteRaoSocial");
dVol.setPeriodeDeute(EPeriodeDeute.VOLUNTARIA);
dVol.setPisTrib("pisTrib");
dVol.setPortaTrib("portaTrib");
dVol.setRefCadastral("refCadastral");
dVol.setSgTrib("sgTrib");
dVol.setSituacioDeute(null);
dVol.setTipusDeute(ETipusDeute.HISTORIC);
//Carreguem exe
respostaDeutesExe.add(dExe);
//Carreguem vol
respostaDeutesVol.add(dVol);
}
//Carreguem tots
respostaDeutesTots.addAll(respostaDeutesExe);
respostaDeutesTots.addAll(respostaDeutesVol);
}
这是上下文代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mockito="http://www.mockito.org/spring/mockito"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.mockito.org/spring/mockito https://bitbucket.org/kubek2k/springockito/raw/tip/springockito/src/main/resources/spring/mockito.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<context:component-scan base-package="cat.base.gpt.ui" />
<!-- mock del serveis que podem atacar per solicitar info -->
<mockito:mock id="serveiSubjecte" class="cat.base.tip.service.ISubjectesService"/>
<mockito:mock id="serveiTip" class="cat.base.tip.service.ITipService"/>
<mockito:mock id="serveiGpt" class="cat.base.gpt.domini.service.IGptService"/>
<mockito:mock id="sessio" class="cat.base.baseframe.session.IBaseSession"/>
<mockito:mock id="usuari" class="cat.base.baseframe.user.IBaseUser"/>
<!--
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:cat/base/bfp/ui/applicationResources" />
</bean>
-->
<bean name="consultaDeutes" class="cat.base.gpt.ui.ConsultaDeutesTest"/>
<bean id="consultaDeutesHandler" class="cat.base.gpt.ui.handler.ConsultaDeutesHandler">
<property name="serveiSubjecte" ref="serveiSubjecte" />
<property name="gptServiceBO" ref="serveiGpt"/>
<property name="sessio" ref="sessio"/>
<property name="usuari" ref="usuari"/>
</bean>
</beans>
答案 0 :(得分:2)
正如我在评论中提到的,该消息意味着您希望使用verify
进行一些行为,但事实并非如此。
我的测试意图对我来说仍然有点不清楚但是如果你试图测试serveiGpt
那么你绝对不应该嘲笑它,而应该嘲笑它的合作者,调用serveiGpt.obtenirDeutes(...)
然后验证对协作者的调用。
但是,如果您打算测试处理程序(在评论中提到),那么您似乎缺少在测试中调用处理程序的代码段,它看起来如下所示:
@Test
public void comprovarCercaBuuida(){
// arrange
DeuteBackBean deuteBB;
List<IDeute> respostaDeutesExe = new ArrayList<IDeute>();
List<IDeute> respostaDeutesVol = new ArrayList<IDeute>();
List<IDeute> respostaDeutesTots = new ArrayList<IDeute>();
Mockito.when(serveiGpt.obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT),Mockito.eq(E_TIPUS_DEUTE_HIS),Mockito.eq(PERIODE_DEUTE_EXE))).thenReturn(respostaDeutesExe);
Mockito.when(serveiGpt.obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT),Mockito.eq(E_TIPUS_DEUTE_HIS),Mockito.eq(PERIODE_DEUTE_VOL))).thenReturn(respostaDeutesVol);
Mockito.when(serveiGpt.obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT),Mockito.eq(E_TIPUS_DEUTE_HIS),Mockito.eq(PERIODE_DEUTE_TOTS))).thenReturn(respostaDeutesTots);
// act
handler.handle(...); // <-- invoking the handler with fictional name
// assert
Mockito.verify(serveiGpt,Mockito.atLeastOnce()).obtenirDeutes(Mockito.eq(CLAU_SUBJECTE_BUIT), Mockito.eq(E_TIPUS_DEUTE_HIS), Mockito.eq(PERIODE_DEUTE_EXE));
//Mockito.verify(serveiPersones,Mockito.atLeastOnce()).cercarPersones(Mockito.eq(PATRO_CERCA_AMB_RESULTATS), Mockito.any(IPager.class));
//Mockito.verify(serveiPersones,Mockito.atLeastOnce()).cercarPersones(Mockito.eq(PATRO_CERCA_AMB_RESULTATS), Mockito.any(IPager.class));
}
为了让事情更清楚一点,我使用arrange-act-assert pattern来构建测试。
虽然这可能无法完全回答你的问题,但我希望它有所帮助。