PowerMock与EasyMock的应用(转)
Leader請(qǐng)求在做Junit測(cè)試的時(shí)辰,Mock掉各個(gè)辦法之間的依附。這兩天進(jìn)修了下PowerMock的應(yīng)用。
PowerMock是EasyMock的一個(gè)擴(kuò)大,參加了static,final,private,以及constructor的Mock功能。然則PowerMock并沒有持續(xù)EasyMock的一些測(cè)試功能,所以不克不及庖代EasyMock,而零丁應(yīng)用。在很多時(shí)辰必必要PowerMock和EasyMock彼此連絡(luò),以及加上WhiteBox,才干更好實(shí)現(xiàn)測(cè)試。
1. 必不成少的一步:添加測(cè)試運(yùn)行器@RunWith(PowerMockRunner.class),若是沒有添加這個(gè)運(yùn)行器,則應(yīng)用的是默認(rèn)的JUnit4.class。在PrepareForTest中參加測(cè)試class。@PrepareForTest(測(cè)試.class)
2. Construtor
public class A{
public void doA(){
B.doB();
}
}
public class B{
public B(){
System.out.println("can""t be here!");
}
}
測(cè)試classA中的doA辦法:
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class})
public class ATest {
@Test
public void testdoA() throws Exception {
B mockB = PowerMock.createMock( B.class );
PowerMock.expectNew( B.class ).andReturn(mockB);
A testA = new A();
PowerMock.replayAll();
testA.doA();
PowerMock.verifyAll();
}
}
3.static
測(cè)試static辦法的時(shí)辰必必要加上@PrepareForTest(靜態(tài)辦法.class),不然就會(huì)拋出java.lang.IllegalStateException: no last call on a mock available異常。若是有多個(gè)class,用{},例如@PrepareForTest({A.class,B.class})
public class A{
public void doA(){
B.doB();
}
}
public class B{
public static String doB() {
return ("can""t be here !");
}
}
測(cè)試classA中的doA辦法:
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class, B.class})
public class ATest {
@Test
public void testdoA() throws Exception {
PowerMock.mockStatic( B.class );
EasyMock.expect(B.doB()).andReturn("Mocked !");
A testA = new A();
PowerMock.replayAll();
assertEquals("Mock not complete !", testA.doA(), "Mocked !");
PowerMock.verifyAll();
}
}
4.mock類中的Field
一個(gè)好的Field應(yīng)當(dāng)有g(shù)etter和setter,然則代碼中沒有,我們也可以用WhiteBox來Mock掉Field。
public class A{
private String C;
public A(){
C = "Can""t be here !";
}
public String doA(){
return C;
}
}
測(cè)試A中的doA辦法
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class, B.class})
public class ATest {
@Test
public void testdoA(){
A testA = new A();
String mockC = "Mocked !";
Whitebox.setInternalState( testA, "C", mockC );
assertEquals("Mock not complete !", testA.doA(), "Mocked !");
}
}
原網(wǎng)頁網(wǎng)址:http://www.byywee.com/page/M0/S820/820868.html
總結(jié)
以上是生活随笔為你收集整理的PowerMock与EasyMock的应用(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vim简本
- 下一篇: AndroidStudio 3.0中之后