程序代码:
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());
}