PowerMock可以用来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。
Mockito只能模拟共有的方法
简单的例子来看一下怎么写UT:
public class FTPClient {
public boolean isConnected() {
return false;
}
public static String staticTest(){
return "123";
}
}<strong>
</strong>
public class FTPTest {
private FTPClient ftp;
FTPTest(FTPClient ftp){
this.ftp=ftp;
}
public boolean isFTPConnected(){
if (!ftp.isConnected()) {
return false;
}
return true;
}
}
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Mockito.*;//mock,when,times
import static org.junit.Assert.*;//assertTrue
@RunWith(PowerMockRunner.class)
@PrepareForTest(FTPClient.class)//在这声明才能powermock这个类的static成员
public class TestMock {
//写测试用例最重要的是要把代码结构调整,
//界面组件的代码与逻辑代码解耦(比如文本框的输入,不传文本框对象而直接获得文本框的输入文本String)
@Test
public void public_test(){
FTPClient FTPclient=mock(FTPClient.class);
when(FTPclient.isConnected()).thenReturn(true);
assertTrue(new FTPTest(FTPclient).isFTPConnected());
verify(FTPclient,times(1)).isConnected();
}
@Test
public void static_test(){
PowerMockito.mockStatic(FTPClient.class);
when(FTPClient.staticTest()).thenReturn("1234");
assertEquals("1234", FTPClient.staticTest());
}
}<strong>
</strong>
http://gojko.net/2009/10/23/mockito-in-six-easy-examples/