2013-03-13 76 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