2013-03-13 3 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()); 
    } 
} 

: 메신저 다른 일을 어디

<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

좋아, 내가 더 모양이 코드의 내 버전입니다. 응답에 감사 드리며 다음 번에 컴파일 가능한 코드를 게시 할 것입니다. 그리고 하나의 질문은 인수가 전달 된 matcher와 실제 런타임 중에 전달되는 정확한 값이 아닌 경우에 when()/whenNew() 비슷한 일이 스텁을하지 못하는 것입니다. 실제 값이 예상되는 상황과 mactchers를 사용할 수있는시기를 알려주시겠습니까? 이런 일이 생기면 나는 그 패턴을 얻을 수 있을까? – broun

+0

문제를 발견 했습니까? 죄송합니다. 다른 사람들의 질문을 이해하지 못합니다. 더 많은 사람들의 도움을 얻기 위해 새로운 질문을 만들어야 할 수도 있습니다. – gontard

관련 문제