2017-11-10 27 views
1

ResourceConfig.class에 args가없는 생성자 모의 노력을하고 있습니다. 이 ResourceConfig 두 개의 생성자를 가지고 발생합니다 (다른 것들 중) :여러 일치하는 생성자 PowerMock; (가변 길이 배열 생성자 대 no-param 생성자)

public ResourceConfig() 
public ResourceConfig(Class... class) 

PowerMock (1.7.3)가 바로 생성자를 얻기 위해 실패합니다. 이것을 버그라고 생각합니다. (?) :

import org.glassfish.jersey.server.ResourceConfig; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

import static org.powermock.api.mockito.PowerMockito.mock; 
import static org.powermock.api.mockito.PowerMockito.whenNew; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ResourceConfig.class) 
public class StackOverflowTest { 


    @Test 
    public void toStackOvflow2() throws Exception { 

    ResourceConfig resConf = mock(ResourceConfig.class); 
    whenNew(ResourceConfig.class).withNoArguments().thenReturn(resConf); 

    //WHATEVER... 
    } 

} 

이 생성됩니다

org.powermock.reflect.exceptions.TooManyConstructorsFoundException : 여러 일치하는 생성자가 발견하십시오 그러나 아마 그것에 solutoin이

코드입니다 매개 변수 유형을 으로 지정하여 PowerMock에서 사용자가 인 방법을 확인할 수 있도록하십시오. 된 .class;
org.glassfish.jersey.server.ResourceConfig()
org.glassfish.jersey.server.ResourceConfig ([Ljava.lang.Class : 클래스 org.glassfish.jersey.server.ResourceConfig 있었다에 매칭 생성자)
org.powermock.reflect.internal.ConstructorFinder.throwExceptionWhenMultipleConstructorMatchesFound (ConstructorFinder.java:89)에서

...

어떤 아이디어가?

답변

1

당신은 예를 들어, 여러 생성자를 억제 할 수

@Test 
public void toStackOvflow2() throws Exception { 
    ResourceConfig resConf = mock(ResourceConfig.class); 

    // suppress TooManyConstructorsFoundException 
    MemberModifier.suppress(MemberMatcher.constructorsDeclaredIn(ResourceConfig.class)); 
    whenNew(ResourceConfig.class).withNoArguments().thenReturn(resConf); 

    // verifying that the expected ResourceConfig instance is returned when using the default ctor ... 
    assertSame(resConf, new ResourceConfig()); 
} 

이 테스트에 통과 :

  • PowerMock 1.7.3
  • 뉴저지 2.26