在单元测试中,有时候需要模拟一个类的私有方法,powermock提供了这样的功能
以下是要测试的类
public class CalcService {
public int increase(int i){
return i+j(i);
}
private int j(Integer j){
return j;
}
}
以下是测试类
import org.easymock.EasyMock;
import org.junit.Test;
import org.powermock.modules.junit4.PowerMockRunner;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import com.tdd.powermock.CalcService;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.easymock.PowerMock.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest(CalcService.class)
public class CalcServiceTest {
@Test
public void testIncrease() throws Exception{
int expected=3;
CalcService tested = createPartialMock(CalcService.class, "j");
expectPrivate(tested, "j",1).andReturn(2);
replay(tested);
assertTrue(expected==tested.increase(1));
verify(tested);
}
}
这些代码很简单,相信很容易看懂,另外需要的jar包如下,以maven来添加依赖
<dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.1</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8</version> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>1.4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-easymock</artifactId> <version>1.4.10</version> <scope>test</scope> </dependency>