Выразите успех или исключите исключение Vavr Попробуйте в модульном тесте Java

У меня есть простой модульный тест, который утверждает экземпляр объекта Try из библиотеки vavr.

@Test
public void testFoo()
{
    final Try<Foo> result = createMyFooInstance();

    assertThat(result.isSuccess()).isTrue();
}

Мой вопрос касается формулировки тестового утверждения. Семантически я хочу, чтобы «если foo успешно, все в порядке, в противном случае выбросить инкапсулированное исключение». Последнее важно, чтобы я мог видеть причину ошибки непосредственно в выводе JUnit.

Есть ли какой-нибудь удобный API, который я могу использовать, чтобы красиво сформулировать эту семантику?


person Emdee    schedule 18.03.2019    source источник
comment
У вас нет утверждения в этом тесте. Вам понадобится assertThat(result.isSuccess()).isTrue(), чтобы на самом деле иметь утверждение. Просить рекомендации библиотеки здесь не по теме.   -  person JB Nizet    schedule 18.03.2019
comment
Вы правы, я это не заметил. Я не понимаю вашего мнения о рекомендациях библиотеки. Я спрашиваю, позволяют ли библиотеки AssertJ, Vavr и связанные с ними хорошо сформулировать семантику. Поэтому я не прошу новую библиотеку, а скорее о том, как правильно их использовать.   -  person Emdee    schedule 18.03.2019


Ответы (1)


Вы могли бы использовать

@Test
public void testFoo() {
    final Try<Foo> result = createMyFooInstance();
    result.get();
}

В случае, когда result является Failure, result.get() вызовет обернутое исключение. В случае, если result - это Success, это будет успешно.

Хотя это решение не содержит явных утверждений, оно неявно откажет в тех случаях, когда result равно Failure.

Если вы предпочитаете, чтобы утверждение было неудачным, а не провалом теста с исключением, вы также можете использовать:

@Test
public void testFoo() {
    final Try<Foo> result = createMyFooInstance();
    assertThatCode(result::get).doesNotThrowAnyException();
}
person Nándor Előd Fekete    schedule 18.03.2019
comment
Как насчет assertThat(result.get()).isEqualTo(myExpectation);? Это приведет к сбою, если это был сбой, и позволяет вам утверждать результат успеха. Кстати, это то, чем мы занимаемся в моей команде. Также стоит упомянуть недавнюю библиотеку assertj-vavr, я вижу классные вещи вроде shouldContain() из github.com/assertj/assertj-vavr/blob/master/src/main/java/org/ - person Sir4ur0n; 22.03.2019
comment
Да, но по вопросу им не с чем сравнивать результат. Они просто хотят знать, удачно ли это, и бросают исходное исключение, если нет - это, по сути, разворачивает Try с помощью get(). - person Nándor Előd Fekete; 22.03.2019