4
У меня есть интерфейс, какMock статический метод вызова в методе по умолчанию в Java 8 интерфейса
public interface WithMD5Calculator{
default String getMd5(){
try{
MessageDigest md = MessageDigest.getInstance("MD5");
//... not important
}catch(NoSuchAlgorithmException e){
//... do some extra stuff and throw wrapped in ServiceException
}
}
// rest of code not important
}
И тест, который должен проверить обработку исключений:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MessageDigest.class)
public class WithMD5Calculator{
@Test
public void shouldHandleNSAEx(){
PowerMockito.mockStatic(MessageDigest.class);
Mockito.when(MessageDigest.getInstance("MD5")).thenThrow(new NoSuchAlgorithmException("Throwed"));
WithMD5Calculator sut = new WithMD5Calculator(){};
ExceptionAssert.assertThat(()-> sut.getMd5())
.shouldThrow(ServiceException.class);
// some more checks
}
}
Но ServiceException
не забросил. Похоже, MessageDigest.getInstance
не издевались.
Любая идея?
'проверка' может быть полезна, если я хочу проверить, вызван метод или более общее поведение статического класса. В моем случае мне не нужно проверять поведение, а изменять поведение метода. –
Идея: при использовании PowerMockito для издевательства над этим методом вы можете использовать PowerMockito для наложения этого метода (например, PowerMockito.when (...). ThenThrow (...)). Как Мокито должен знать, что вы вызвали статический метод? – xmjx
Метод 'when' от PowerMockito - это просто оболочка для' when' из библиотеки Mockito. «Магия» PowerMockito заключается в том, что он готовит класс со статикой, по аннотации '@ PrepareForTest',« макет »от Mockito. –