2013-03-13 45 views
1
Class A{ 

    B objB = new B(); 
    objB.someBMethod(); 

    } 

    Class B{ 

    public void someBMethof(){ 

    C objC = new C(); 

    } 
    } 

    class C{ 
    int a=1; 
    public C(){} 
    public C(int v){ 
    a=v; 
    } 
    } 

@RunWith(PoswerMockRunner.class) 
@PrepareForTest({ A.class, B.class, C.class}) 
Class TestApp{ 

    @Mock 
    C mockC; 

    PowerMockito.whenNew(C.class).withNoArguments().thenReturn(mockC); 

} 

上面的代碼捕獲了即時消息試圖做的事情。但whenNew()似乎沒有工作,當我嘗試調試創建的C對象不是模擬。不知道發生了什麼。一些指針將不勝感激。謝謝Powermock構造函數嘲笑對實例化對象沒有影響

回答

5

你提供了一些代碼,謝謝。但下次考慮發佈sscce(正確(Compilable)示例)。

我試過(並修復你的代碼),它的工作原理。這是我的版本的代碼:

public class A { 

    public int someAMethod() { 
     B objB = new B(); 
     return objB.someBMethod(); 
    } 
} 

public class B { 

    public int someBMethod() { 
     C objC = new C(); 
     return objC.getA(); 
    } 
} 

import static org.junit.Assert.assertEquals; 
import static org.mockito.Mockito.when; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mock; 
import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ A.class, B.class, C.class }) 
public class TestApp { 

    @Mock 
    C mockC; 

    @Test 
    public void shoudlReturnTheCValue() throws Exception { 
     when(mockC.getA()).thenReturn(666); 
     PowerMockito.whenNew(C.class).withNoArguments().thenReturn(mockC); 
     assertEquals(666, new A().someAMethod()); 
    } 
} 

我有以下依賴性配置Maven項目:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-api-mockito</artifactId> 
    <version>1.5</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-module-junit4</artifactId> 
    <version>1.5</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.11</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.mockito</groupId> 
    <artifactId>mockito-all</artifactId> 
    <version>1.9.5</version> 
    <scope>test</scope> 
</dependency> 
+0

好吧,我會再看看那裏IM做不同的。感謝您的回覆,並確保下次發佈可編譯的代碼。還有一個問題是,如果傳入的參數是通過匹配器完成的,而不是在實際運行時傳遞的確切值,那麼我會看到有些時候when()/ whenNew()類似的東西無法執行存根操作。你能告訴我什麼情況下預期的實際值和什麼時候可以使用mactchers?發生這種情況時我能得到這種模式嗎? – broun 2013-03-14 02:00:06

+0

你發現了這個問題?對不起,我不瞭解其他問題。也許你應該創造一個新的問題來獲得更多人的幫助。 – gontard 2013-03-14 15:57:32

相關問題