PowerMock与EasyMock的应用(转)
Leader請求在做Junit測試的時辰,Mock掉各個辦法之間的依附。這兩天進修了下PowerMock的應用。
PowerMock是EasyMock的一個擴大,參加了static,final,private,以及constructor的Mock功能。然則PowerMock并沒有持續EasyMock的一些測試功能,所以不克不及庖代EasyMock,而零丁應用。在很多時辰必必要PowerMock和EasyMock彼此連絡,以及加上WhiteBox,才干更好實現測試。
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(靜態辦法.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應當有getter和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 !");
     }
}
原網頁網址:http://www.byywee.com/page/M0/S820/820868.html
總結
以上是生活随笔為你收集整理的PowerMock与EasyMock的应用(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Vim简本
- 下一篇: Oracle Imp and Exp (
