В моей программе я выбрасываю пользовательский объект Exception MyCustomException
, который выглядит так:
public class MyCustomException
{
private MyCustomExceptionObject myCustomExceptionObject;
// Getters, Setters, Constructors...
}
public class MyCustomExceptionObject
{
int code;
// Getters, Setters, Constructors...
}
Благодаря Spring Boot Starter Test у меня есть много библиотек для тестирования.
- AssertJ
- Юнит4
- Мокито
- Хэмкрест
В настоящее время я в основном использую AssertJ. Один из моих тестов дает методу недопустимые параметры и ожидает исключение.
@Test
public void test()
{
org.assertj.core.api.Assertions.assertThatThrownBy(() -> someMethod(-1)).isExactlyInstanceOf(MyCustomException.class);
}
public void someMethod(int number)
{
if (number < 0)
{
throw new MyCustomException(new MyCustomExceptionObject(12345));
}
//else do something useful
}
Это отлично работает, но я хочу более конкретно протестировать исключения, проверяя, соответствует ли code
ожидаемому. Что-то вроде этого будет работать:
try
{
someMethod(-1);
}
catch (MyCustomException e)
{
if (e.getCode() == 12345)
{
return;
}
}
org.assertj.core.api.Assertions.fail("Exception not thrown");
но я скорее ищу однострочник, например:
org.assertj.core.api.Assertions.assertThatThrownBy(() -> someMethod(-1)).isExactlyInstanceOf(MyCustomException.class).exceptionIs((e) -> e.getCode() == 12345);
Существует ли что-то подобное в какой-либо из перечисленных выше библиотек тестирования (предпочтительно AssertJ)?