У меня есть приложение Spring, которое вызывает внешние API (у меня нет контроля над этим внешним проектом и его кодом). Я пишу интеграционные тесты в своем весеннем проекте. Тест вызывает эти API. Один из API выдает исключение для определенных входных данных:
В тестах я ловлю исключение как:
Throwable throwable = catchThrowable(() -> TestHelper.createProduct(...));
assertThat(throwable)
.isInstanceOf(CustomException.class)
.hasMessageContaining(PRODUCT_CREATE_ERROR)
.hasCause(null);
Я попытался напечатать throwable.getMessage()
, и это то, что он печатает:
An internal error occurred: status code: [400], status text: [Bad Request],
headers: [[Transfer-Encoding:"chunked", Content-Type:"application/json; charset=utf-8", Server:"Kestrel", X-Powered-By:"ASP.NET", Date:"Fri, 10 Sep 2017 22:38:37 GMT"]],
body: [{"status":400,"detail":"Cannot create product."}]
Я хочу иметь возможность перехватить сообщение «Не удается создать продукт», я вижу в сообщении выше и использовать его, чтобы подтвердить, что это сообщение об ошибке было возвращено, что-то вроде:
throwable.
.hasMessageContaining(capturedMessage)
Есть ли способ получить это сообщение «Невозможно создать продукт», я вижу в деталях тела выше (из исключения. GetMessage)
Если я сделаю что-то вроде: .hasMessageContained («Внутреннийпроизошла ошибка "), это работает, но я также хочу иметь возможность сделать что-то подобное для ошибочного текста" Не удается создать продукт ". Как я могу получить этот конкретный текст и сказать, что эта ошибка была возвращена?