PowerMock与EasyMock的应用(转)
Leader請求在做Junit測試的時辰,Mock掉各個辦法之間的依附。這兩天進修了下PowerMock的應用。
PowerMock是EasyMock的一個擴大,參加了static,final,private,以及constructor的Mock功能。然則PowerMock并沒有持續(xù)EasyMock的一些測試功能,所以不克不及庖代EasyMock,而零丁應用。在很多時辰必必要PowerMock和EasyMock彼此連絡,以及加上WhiteBox,才干更好實現(xiàn)測試。
1. 必不成少的一步:添加測試運行器@RunWith(PowerMockRunner.class),若是沒有添加這個運行器,則應用的是默認的JUnit4.class。在PrepareForTest中參加測試class。@PrepareForTest(測試.class)
2. Construtor
public class A{
public void doA(){
B.doB();
}
}
public class B{
public B(){
System.out.println("can""t be here!");
}
}
測試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
測試static辦法的時辰必必要加上@PrepareForTest(靜態(tài)辦法.class),不然就會拋出java.lang.IllegalStateException: no last call on a mock available異常。若是有多個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 !");
}
}
測試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
一個好的Field應當有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;
}
}
測試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简本
- 下一篇: Oracle Imp and Exp (