PowerMockito не может смоделировать MessageDigest.getInstance (), чтобы выдать исключение - PullRequest
0 голосов
/ 07 сентября 2018

Попытка получить MessageDigest.getInstance (), чтобы вызвать исключение NoSuchAlgorithmException. Кажется, все правильно, но это не будет исключением. Тестирование аналогичной вещи с помощью DatatypeFactory.newInstance () успешно вызывает DatatypeConfigurationException.

И DatatypeFactory, и MessageDigest являются «публичными абстрактными» классами, а вызываемые методы являются «общедоступными», поэтому я не могу понять, почему MessageDigest.getInstance () не дает мне никаких исключений.

Есть идеи?

Метод тестирования (MessageDigest)

@UtilityClass
public final class HashHelper {

  public static void messageDigest() throws NoSuchAlgorithmException {
    MessageDigest.getInstance("SHA-256");
  }
}

Тестовый класс (MessageDigest)

@RunWith(PowerMockRunner.class)
@PrepareForTest({MessageDigest.class})
public class HashHelperTest {
  @Rule
  public final ExpectedException thrown = ExpectedException.none();

  @Test
  public void shouldThrowNoSuchAlgorithmException() throws NoSuchAlgorithmException {
    PowerMockito.mockStatic(MessageDigest.class);
    PowerMockito.when(MessageDigest.getInstance(any())).thenThrow(new NoSuchAlgorithmException());
    thrown.expect(NoSuchAlgorithmException.class);
    HashHelper.messageDigest();
  }
}

Тестируемый метод, работает (DatatypeFactory)

@UtilityClass
public final class SoapHelper {

  public static void dataTypeInstance() throws DatatypeConfigurationException {
    DatatypeFactory.newInstance();
  }
}

Тестовый класс, рабочий (DatatypeFactory)

@RunWith(PowerMockRunner.class)
@PrepareForTest({DatatypeFactory.class})
public class SoapHelperTest {
  @Rule
  public final ExpectedException thrown = ExpectedException.none();

  @Test
  public void shouldTrhowDatatypeConfigurationException() throws DatatypeConfigurationException {
    PowerMockito.mockStatic(DatatypeFactory.class);
    PowerMockito.when(DatatypeFactory.newInstance()).thenThrow(new DatatypeConfigurationException());
    thrown.expect(DatatypeConfigurationException.class);
    SoapHelper.dataTypeInstance();
  }
}
...