AssertJ assert на Exception охватывает еще одно исключение - PullRequest
0 голосов
/ 28 марта 2020

Я новичок в AssertJ. Я столкнулся с некоторой проблемой, когда использую AssertJ для юнит-тестирования.

  • JAVA: версия 8
  • AssertJ: 3.11.1

У меня есть исходный код, как показано ниже, чтобы захватить исключение и выдать другое исключение.

try {
    Integer.valueOf(valueA);
} catch(Exception e) {
    throw new XXXException("value is not valid", e);
}

Мой тестовый пример, как показано ниже, не прошел, и мне сказали, что неправильное исключение утверждает, это немного сбивает с толку.

Throwable thrown = catchThrowable(() -> {
    contract.init(ctx, "A", "100A", "B", "200");
});
assertThat(thrown).isInstanceOf(XXXException.class);

Сообщение об ошибке, как показано ниже, похоже, что исходное исключение было захвачено AssertJ. Кто-нибудь может помочь? Это ошибка или моя ошибка использования API AssertJ? Большое спасибо.

java.lang.AssertionError: 
Expecting:
  <java.util.IllegalFormatConversionException: d != java.lang.String>
to be an instance of:
  <xxxx.XXXException>
but was:
  <"java.util.IllegalFormatConversionException: d != java.lang.String

1 Ответ

0 голосов
/ 29 марта 2020

Вот моя попытка воспроизвести проблему, тест проходит, как и ожидалось:

  @Test
  public void test() {
    Throwable thrown = catchThrowable(() -> f());
    assertThat(thrown).isInstanceOf(RuntimeException.class);
  }

  private void f() {
    try {
      Integer.valueOf("100A");
    } catch (Exception e) {
      throw new RuntimeException("value is not valid", e);
    }
  }

Можете ли вы показать нам, что делает contract.init?

Другая возможность может быть в трассировке стека, если она содержит %d где-то трассировку стека, ее можно интерпретировать как String.format, но трудно сказать без подробностей.

...