测试包:jmockit-1.6
被测试类:
package edu.com;
import java.util.ArrayList;
import java.util.List;
public class T {
private static List<Integer> list;
public static void init(){
list = new ArrayList<Integer>();
}
public static List<Integer> setList(){
list.add(1);
list.add(2);
return list;
}
}
想实现的是不执行init方法,而直接去执行setList()方法,这种形式在数据库操作中比较常见,如测试的时候不真正的去连接数据库(getConnection)
package edu.com;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import mockit.Deencapsulation;
import mockit.Expectations;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testSetList(){
// 期望值设定
List<Integer> expectedList = new ArrayList<Integer>();
expectedList.add(1);
expectedList.add(2);
// 属性的Mock
new Expectations(T.class) {
{
Deencapsulation.setField(T.class, "list", new ArrayList<Integer>());
}
};
// 方法实际运行的值
List<?> actualList = Deencapsulation.invoke(T.class, "setList");
// 比较值
assertEquals(expectedList.get(0), actualList.get(0));
}
}