2013-09-18 17 views
1

Я пытаюсь проверить услугу это кусок кода:тестирование службы с Mockito и TestNG

@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)); 
} 

, но я узнал это исключение с мавена: T

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(
    [email protected], 
    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) 

I действительно не понимаю, что я делаю wrong.ty.

код @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> 
+2

Сообщение означает, что вы ожидали какого-либо поведения - с помощью 'verify' - но этого не произошло. Я не вижу, где вы выполняете испытуемый объект, это весь код? – Jonathan

+0

есть somemethod раньше, я выложу. – ZaoTaoBao

+0

Спасибо, но я все еще не вижу, что вызывает ожидаемые методы на 'serveiGpt', например. что вызывает 'serveiGpt.obtenirDeutes (...)' etc ...? – Jonathan

ответ

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 для структурирования вашего теста.

Хотя это может не полностью ответить на ваш вопрос, я надеюсь, что это поможет.

+0

ty для вашего времени, я продолжаю читать и пытаюсь понять. Надеюсь, когда-нибудь мне поможет. – ZaoTaoBao

+0

Нет проблем, для получения дополнительной информации о Mockito это [вопрос] (http://stackoverflow.com/q/1404824/69875) имеет некоторые ссылки на ресурсы. – Jonathan

Смежные вопросы