2014-12-18 70 views
1

我試圖嘲弄以下電話:whatnew不工作: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(); 
} 

我用@PrepareForTest(BrazilConfigurationManager.class)的建議herewhatNew部分。

在這我得到InvalidUseOfMatchersException。

我也試過

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

但也不能正常工作。

關於我缺少的任何建議。

回答

1

在符合eq(String.class)替換withArgumentsString.class說法: PowerMockito.whenNew(String.class).withArguments(any(byte[].class), String.class).thenThrow(new UnsupportedEncodingException());

而且要得到具體構造函數時有可用的(在這種情況下)許多構造函數,那麼你就需要使用到查找特定構造withParameterTypes下面給出:

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

當您在使用參數匹配器,所有的參數都必須匹配器或沒有。這意味着您不能混合像any(Some.class)這樣的匹配器和像String.class這樣的實際參數。所以你解決的方法是通過使用匹配器將實際參數包裝在eq匹配器中。

+0

謝謝!現在我得到'TooManyConstructorsFoundException'。任何線索? –

+0

嘗試'PowerMockito.whenNew(String.class).withParameterTypes(byte []。class,String.class).withArguments(any(byte []。class),eq(String.class)).thread(new UnsupportedEncodingException() )'這將找到提及類型的構造函數。 –

+0

是的。把它合起來。請回答,以便我可以接受。 –