2014-12-18 6 views
1

:: 나는 다음과 같은 호출을 조롱하려고 InvalidUseOfMatcfhers 예외

token = new String(Base64.decodeBase64(token), "UTF-8"); 

다음은

@Test(expected = InternalServiceException.class) 
public void testGetDecodedVlsAuthorizationTokenWithException() throws Exception { 
    PowerMockito.whenNew(String.class).withArguments(any(byte[].class), String.class).thenThrow(new UnsupportedEncodingException()); 
    brazilConfigurationManager.getDecodedVlsAuthorizationToken(); 
} 

내가 제안 herewhatNew 아래 부분으로 @PrepareForTest(BrazilConfigurationManager.class)을 사용하고 있습니다.

여기에 InvalidUseOfMatchersException이 표시됩니다.

는 또한
PowerMockito.whenNew(String.class).withAnyArguments().thenThrow(new UnsupportedEncodingException()); 

을 시도했지만이 또한 작동하지 않습니다.

제가 누락 된 부분에 대한 제안.

답변

1

라인에 eq(String.class)으로 withArguments에서 String.class 인수를 대체합니다 PowerMockito.whenNew(String.class).withArguments(any(byte[].class), String.class).thenThrow(new UnsupportedEncodingException());

는 또한 (이 경우)를 사용할 수 많은 생성자가있는 경우 특정 생성자를 얻기 위해, 당신은 사용하여 특정 생성자를 찾을 필요 아래에 주어진 withParameterTypes : 당신이 인수 매처 (matcher)를 사용하는 경우

PowerMockito.whenNew(String.class) 
    .withParameterTypes(byte[].class, String.class) 
    .withArguments(any(byte[].class), eq(String.class)) 
    .thenThrow(new UnsupportedEncodingException()); 

, 모든 인수는 매처 (matcher) 또는 없음해야합니다. 즉, any(Some.class)과 같은 인수와 String.class과 같은 실제 인수를 섞어서는 안됩니다. 그래서 여러분이 돌아 다니는 방법은 eq 정규식에 정규식을 래핑하여 실제 인수에 대한 정규식을 사용하는 것입니다.

+0

고마워요! 이제'TooManyConstructorsFoundException'을 얻습니다. 어떤 단서? –

+0

.ParameterTypes (byte []. class, String.class) .withArguments (any (byte []. 클래스), eq (String.class))를 사용하여 PowerMockito.whenNew (String.class)를 시도한 다음에 새로운 UnsupportedEncodingException)'를 사용하여 생성자를 찾을 수 있습니다. –

+0

예. 망할. 내가 받아 들일 수 있도록 대답 해주세요. –