2016-01-28 27 views
0

我使用了PowerMock來模擬Constructor.Afer啓動應用程序,我認爲所有行都應該是綠色的。但實際上所有行都是紅色的。
我認爲模仿構造函數會導致這種現象。因爲嘲笑其他人,比如最終類,確定。如何解決這個問題?使用PowerMock模擬構造函數時JaCoCo/EclEmma的源高亮函數不起作用

//code: 
public class People { 
    public String sayHello(){ 
     return "hello"; 
    } 
} 

public class Family { 
    public String doEvent() { 
     People p = new People(); 
     String str = p.sayHello(); 
     System.out.println(str); 
     return str; 
    } 
} 

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Family.class) 
public class FamilyTest { 
    @Test 
    public void test() throws Exception { 
     Family f = new Family(); 

     String str = "hello mock"; 
     People p = PowerMock.createMock(People.class); 

     PowerMock.expectNew(People.class).andReturn(p); 

     EasyMock.expect(p.sayHello()).andReturn(str); 
     PowerMock.replay(p, People.class); 

     String strActual = f.doEvent(); 

     Assert.assertEquals(str, strActual); 
     PowerMock.verify(p, People.class); 
    } 
} 

回答

1

您不應該使用@PrepareForTest,除非您正在嘲笑該類中的靜態方法。

我相信你的問題是,當你準備一個使用Powermocks runner進行測試的類時,它會對EclEmma用於行覆蓋的字節代碼做些簡單的事情。既然你沒有嘲笑你的家庭課堂中的任何靜態方法,請嘗試從你的@PrepareForTest中刪除。

+0

我'嘲笑人類的構造函數,所以有必要在類級使用'@ PrepareForTest'。你可以看到[MockConstructor](https://github.com/jayway/powermock/wiki/MockConstructor) – niaomingjian

+0

但你並沒有嘲笑家庭課...... – Lencalot

+0

雖然我沒有嘲笑家庭課,但我認爲它需要基於[MockConstructor](https://github.com/jayway/powermock/wiki/MockConstructor)文件。在本文中,它說**我們沒有準備File.class的原因是,一個新的在執行expect之前永遠不會創建File實例newNew,PowerMock只是攔截來自新的類的新的調用,因此您需要在此示例中準備PersistenceManager類**我正在嘲笑在類中使用的People類family class,所以我在類級別添加了'@PrepareForTest(Family.class)'。 – niaomingjian

相關問題