2011-06-17 8 views
2

Je ne suis pas sûr de ce que je fais mal ici. J'ai eu cette erreur dans mon code, j'ai donc écrit un exemple simple pour essayer d'identifier où se situe l'erreur. J'ai un ClassA, qui dépend de deux services ServiceA et ServiceB, j'essaie de tester ClassA, et de moquer ServiceA et ServiceB.easymock comportement inattendu

/** 
* Last edited by: $Author: cg $ 
* on: $Date: 17 Jun 2011 11:36:25 $ 
* Filename: $RCSfile: ClassA.java,v $ 
* Revision: $Revision: $ 
*/ 
package easy; 

import java.util.HashMap; 


/** 
* 
* @version $Revision: $, $Date: 17 Jun 2011 11:36:25 $ 
*/ 
public class ClassA { 
    private ServiceA serviceA; 
    private ServiceB serviceB; 
    public ClassA(ServiceA a, ServiceB b) { 
     this.serviceA = a; 
     this.serviceB = b;   
    } 
    public String process(String p) { 
     HashMap<String,String> a = serviceA.getServiceA(p); 
     String ret = serviceB.getServiceB(a); 
     return ret; 
    } 
} 


interface ServiceA{ 
    HashMap<String,String>getServiceA(String s); 
} 

interface ServiceB{ 
    String getServiceB(HashMap<String,String> p); 
} 

Mon test est la suivante:

/** 
* Last edited by: $Author: cg $ 
* on: $Date: 17 Jun 2011 11:43:05 $ 
* Filename: $RCSfile: ClassATest.java,v $ 
* Revision: $Revision: $ 
*/ 
package easy; 

import static org.easymock.EasyMock.eq; 
import static org.easymock.EasyMock.expect; 

import java.util.HashMap; 

import junit.framework.Assert; 

import org.easymock.EasyMock; 
import org.easymock.IMocksControl; 
import org.junit.Test; 
/** 
* 
* @version $Revision: $, $Date: 17 Jun 2011 11:43:05 $ 
*/ 
public class ClassATest { 

    @Test 
    public void testProcess() { 
     IMocksControl mockery = EasyMock.createControl(); 
     mockery.resetToStrict(); 
     mockery.checkOrder(true); 

     ServiceA serviceA = EasyMock.createMock("ServiceA",ServiceA.class); 
     ServiceB serviceB = EasyMock.createMock("ServiceB",ServiceB.class); 

     ClassA a = new ClassA(serviceA, serviceB); 

     String myParam = "My Test"; 

     HashMap<String,String> retFromServiceA = new HashMap<String,String>(); 
     retFromServiceA.put("my", "name"); 
     expect(serviceA.getServiceA(eq(myParam))).andReturn(retFromServiceA); 
     expect(serviceB.getServiceB(retFromServiceA)).andReturn(myParam); 

     mockery.replay(); 
     String actual = a.process(myParam); 
     mockery.verify(); 

     Assert.assertEquals(myParam, actual); 
    } 
} 

le résultat est un échec parce que le rendement réel est nul.

J'ai essayé de déboguer dans le code, et je me rends compte que, bien que dans mes attentes, je dis que j'attends ServiceA.getServiceA pour revenir retFromServiceA, ce n'est pas. il retourne null.

Des idées?

Répondre

2

ServiceA et Serviceb ont été créés sans utiliser le contrôle de la moquerie, vous devez donc utiliser:

EasyMock.replay(serviceA, serviceB); 

avant d'exécuter la méthode de processus