我正试图模仿以下电话:
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)
部分下使用了whatNew
建议的here。
在此我得到InvalidUseOfMatchersException。
我也试过
PowerMockito.whenNew(String.class).withAnyArguments().thenThrow(new UnsupportedEncodingException());
但这也行不通。
关于我缺少什么的任何建议。
答案 0 :(得分:1)
将String.class
中的withArguments
参数替换为行中的eq(String.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
匹配器中来使用匹配器来实现真正的参数。