easymock2.2.2+junit4.4

程序代码:

package test;

import javax.servlet.http.HttpServletRequest;

public class Calculator {
    public String getNewName(String a) {
        return "john"+a;
    }

    public String getValue(HttpServletRequest req) {
        req.getAttribute("");
        return req.getParameter("name");
    }
}


测试类:

 mock的种类
 EasyMock提供了三种Mock类型:StrictMock、NiceMock、Mock。


 种类   生成函数检查顺序 检查方法是否调用 对未说明的方法调用
Mock createMock() 抛出异常
 NiceMock createNiceMock() 返回0、null,不抛出异常
StrictMock createStrictMock()  抛出异常


测试类:


import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.checkOrder;
import static org.easymock.classextension.EasyMock.createControl;
import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.createNiceMock;
import static org.easymock.classextension.EasyMock.createStrictMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.reset;
import static org.easymock.classextension.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.easymock.classextension.IMocksControl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {
    Calculator c = null;

    @Before
    public void setup() {
        c = new Calculator();
    }

    @Test
    public void testGetNewName() {
        assertEquals("john1", c.getNewName("1"));
    }

    @Test
    public void testgetValue() {
        HttpServletRequest request = createMock(HttpServletRequest.class);
        expect(request.getParameter("name")).andReturn("john");
        expect(request.getAttribute("")).andReturn(true);
        replay(request);
        assertEquals("john", c.getValue(request));
        verify(request);
    }

    @After
    public void tear() {
        c = null;
    }

}

以下是额外的测试代码,供参考:

    @Test
    public void testClassMocking() {
        ArrayList list = createMock(ArrayList.class);
        testList(list);
    }

    @Test
    public void testInterfaceMocking() {
        List list = createMock(List.class);
        testList(list);
    }

    @Test
    public void testMocksControl_Interface() {
        IMocksControl ctrl = createControl();
        List list = ctrl.createMock(List.class);
        testList(list);
    }

    @Test
    public void testMocksControl_Class() {
        IMocksControl ctrl = createControl();
        ArrayList list = ctrl.createMock(ArrayList.class);
        testList(list);
    }

    @Test
    public void testMocksControl_PartialMock() throws Exception {
        IMocksControl ctrl = createControl();
        ArrayList list = ctrl
                .createMock(ArrayList.class, new Method[] { ArrayList.class
                        .getMethod("size", new Class[0]) });
        testList(list);

        assertTrue(list.isEmpty());
    }

    private void testList(List list) {
        expect(list.size()).andReturn(3);
        replay(list);
        assertEquals(3, list.size());
        verify(list);
    }

    @Test
    public void testResetReplay() {
        ArrayList list = createStrictMock(ArrayList.class);
        expect(list.size()).andReturn(3);
        reset(list);
        expect(list.size()).andReturn(1);
        replay(list);
        assertEquals(1, list.size());
        verify(list);
    }

    @Test
    public void testVarargs() {
        ArrayList list2 = createStrictMock(ArrayList.class);
        ArrayList list1 = createStrictMock(ArrayList.class);

        expect(list1.size()).andReturn(1);
        expect(list2.size()).andReturn(2);
        reset(list1, list2);

        expect(list1.size()).andReturn(3);
        expect(list2.size()).andReturn(4);
        replay(list1, list2);

        assertEquals(3, list1.size());
        assertEquals(4, list2.size());

        verify(list1, list2);
    }

    @SuppressWarnings("unchecked")
    @Test
    public void testCheckOrder() {
        ArrayList<Integer> list = createStrictMock(ArrayList.class);
        checkOrder(list, false);
        expect(list.add(1)).andReturn(true);
        expect(list.add(3)).andReturn(true);
        replay(list);
        list.add(3);
        list.add(1);
        verify(list);
    }

    @SuppressWarnings("unchecked")
    @Test
    public void testStrictMock_Partial() throws Exception {
        ArrayList<Integer> list = createStrictMock(ArrayList.class,
                new Method[] { ArrayList.class.getMethod("add",
                        new Class[] { Object.class }) });

        expect(list.add(1)).andReturn(true);
        expect(list.add(2)).andReturn(true);

        replay(list);

        assertTrue(list.isEmpty());

        try {
            list.add(2);
            fail();
        } catch (AssertionError e) {
        }
    }

    @SuppressWarnings("unchecked")
    @Test
    public void testMock_Partial() throws Exception {
        ArrayList<Integer> list = createMock(ArrayList.class,
                new Method[] { ArrayList.class.getMethod("add",
                        new Class[] { Object.class }) });

        expect(list.add(1)).andReturn(true);
        expect(list.add(2)).andReturn(true);

        replay(list);

        assertTrue(list.isEmpty());

        list.add(2);
        list.add(1);

        verify(list);
    }

    @Test
    public void testNiceMock_Partial() throws Exception {
        ArrayList list = createNiceMock(ArrayList.class,
                new Method[] { ArrayList.class.getMethod("get",
                        new Class[] { Integer.TYPE }) });

        replay(list);

        assertNull(list.get(0));
        assertTrue(list.isEmpty());
    }

猜你喜欢

转载自blog.csdn.net/liliangzhao/article/details/1947352
4.4