2010-11-30 5 views
0

PowerMock을 사용하여 제 3 자 코드를 모의하려고 시도하고 확장 된 메서드로 문제가 발생했습니다.확장 메서드가있는 PowerMock 문제

그래서 나는 무엇이 일어나고 있는지 보여줄 발췌 문장을 줄 것입니다.

ClassA extends ClassB{ 
    super(); 
} 

ClassB extends ClassC{ 
    super(); 
} 

ClassC { 
    String methodA(); 
} 

이제 ClassA를 모의하려고합니다. 내 코드가 사용하고있는 것입니다. 모의 내가 너무 좋아 기대를 추가 할 때 그러나 잘 작성

expect(mockClassA.methodA()).andReturn("string"); 

나는 다음과 같은 오류 얻을 : 내가 놓친 거지 무엇에

java.lang.IllegalStateException: missing behavior definition for the preceding method call methodA() at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43) at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(EasyMockMethodInvocationControl.java:95) at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:104) at org.powermock.core.MockGateway.methodCall(MockGateway.java:167) at .ClassC.methodA(ClassC.java)

어떤 생각을? 많은 세부 사항을 포함하고 있지는 않지만 표기법을 사용하여 ClassA 테스트를 준비했습니다. 기대를 설정하기 전에 mockClassA를 잘못된 상태로 잘못 설정하지 않도록 한 곳에서 재생을 설정했습니다.

답변

0

예외는 내가 클래스 확장과 관련이있는 것보다 기대에 미치지 못하는 결과였습니다. 잘못 명시된 질문에 사과드립니다.

0

나는 이런 식으로 해냈지만 PowerMock이 필요한 이유를 이해하지 못합니다. (EasyMock/Mockito를 사용하면 그렇게 할 수 있습니다.)

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassA.class) 
public class ClassATest { 
    @Test 
    public void finalMethodString() throws Exception { 
     ClassA f = PowerMock.createNiceMock(ClassA.class); 
     EasyMock.expect(f.methodA()).andReturn("haha"); 
     EasyMock.replay(f); 
     assertEquals("haha1", f.methodA()); 
    } 
} 


class ClassA extends ClassB{ 
    @Override 
    String methodA() { 
     return "1"; 
    } 
} 
class ClassB extends ClassC{ 
    @Override 
    String methodA() { 
     return "b"; 
    } 
} 
class ClassC { 
    String methodA() { 
     return null; 
    } 
} 
+0

나는 powermock.version = 1.4.6, easymockclassextension = 3.0을 사용합니다. – IAdapter

관련 문제