easymock неожиданное поведение - PullRequest
2 голосов
/ 17 июня 2011

Я не уверен, что я делаю здесь не так. У меня была эта ошибка в моем коде, поэтому я написал простой пример, чтобы попытаться определить, где находится ошибка.

У меня есть ClassA, который зависит от двух сервисов ServiceA и ServiceB, я пытаюсь протестировать ClassA и насмехаться над ServiceA и ServiceB.

  /**
 * 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);
}

Мое тестирование следующее:

/**
 * 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);
    }
}

результат не получается, потому что фактический результат равен нулю.

Я попытался отладить код, и я понимаю, что хотя в моих ожиданиях я говорю, что ожидаю, что ServiceA.getServiceA вернет retFromServiceA , это не так. возвращается ноль .

Есть идеи?

1 Ответ

2 голосов
/ 17 июня 2011

ServiceA и ServiceB были созданы без использования элемента управления насмешкой, поэтому вы должны использовать:

EasyMock.replay(serviceA, serviceB);

до выполнения метода процесса

...