Есть ли способ проверить два противоположных метода в JUnit 5?

У меня есть два противоположных метода, которые я должен проверить

Первый метод

private boolean isGeoOrtInboundPortabilityToNonGeoSipFiber(Character oldNdipAffectation,
      Character newNdipAffectation) {
    return isNdip09NatifVoipSip(newNdipAffectation)
        && isNdipGeoOperator(oldNdipAffectation);
}

Второй способ

private boolean isNonGeoSipOutboundPortabilityToGeoFiberOrt(Character oldNdipAffectation,
      Character newNdipAffectation) {
    return isNdipGeoOperator(newNdipAffectation)
        && isNdip09NatifVoipSip(oldNdipAffectation);
}

Вот реализация

protected void checkRenumberingValidation(Character oldNdipAffectation,
      NdipRenumberingRequest request, String basicatCode) {
    var oldNdipIndicatif = findIndicatifByNd(request.getOldNdip());
    var newNdipIndicatif = findIndicatifByNd(request.getNewNdip());

    if (!isClassicIpPortedNds(request)
        || !isGeoOrtInboundPortabilityToNonGeoSipFiber(oldNdipAffectation, newNdipAffectation)
        || !isNonGeoSipOutboundPortabilityToGeoFiberOrt(oldNdipAffectation, newNdipAffectation)
        || !isRtcPortabilityToFiberSip(newNdipIndicatif, oldNdipAffectation, newNdipAffectation,
        basicatCode)
        && (
        !Objects.equals(newNdipIndicatif.getZne().getCzne(), oldNdipIndicatif.getZne().getCzne())
            || !Objects.equals(newNdipIndicatif.getCsitugeo(), oldNdipIndicatif.getCsitugeo()))
    ) {
      throwFunctionalException(ERROR_34);
    }

}

Если я передам «D» и «P», это вызовет throwFunctionalException (ERROR_34), и это нормально

!isGeoOrtInboundPortabilityToNonGeoSipFiber('D', 'P') // Throw exception which is expected

Проблема в том, что метод isRtcPortabilityToFiberSip() никогда не достигается, потому что, если я передам «P» и «D»,

!isGeoOrtInboundPortabilityToNonGeoSipFiber('P', 'D') // Pass
isNonGeoSipOutboundPortabilityToGeoFiberOrt('P', 'D') // Throw exception which is expected
!isRtcPortabilityToFiberSip(newNdipIndicatif, oldNdipAffectation, newNdipAffectation,
        basicatCode) // never reached

Как достичь !isRtcPortabilityToFiberSip с помощью JUnit 5?

Я гуглил проблему без какого-либо решения.

Посмотрите на assertThrows(...) — вы в основном тестируете исключение, а затем позволяете тесту продолжаться, если оно выдается. Вы также можете подумать о том, будут ли эти 3 вызова на самом деле 3 независимыми тестами - по крайней мере, первые 2 кажутся таковыми, поскольку нет смысла терпеть неудачу и передавать один и тот же ввод.

Thomas 10.01.2023 11:05
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
1
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас должно быть три разных тестовых функции:

    @Test
    public void testIsGeoOrtInboundPortabilityToNonGeoSipFiber() throws Exception
    {
        !isGeoOrtInboundPortabilityToNonGeoSipFiber('P', 'D') // Pass
    }

    @Test(expected = Exception.class)
    public void testIsNonGeoSipOutboundPortabilityToGeoFiberOrt() throws Exception
    {
        isNonGeoSipOutboundPortabilityToGeoFiberOrt('P', 'D') // Throw exception which is expected
    }

    @Test
    public void testIsRtcPortabilityToFiberSip() throws Exception
    {
        !isRtcPortabilityToFiberSip(newNdipIndicatif, oldNdipAffectation, newNdipAffectation,
        basicatCode) // never reached, but now it will be!
    }

Хорошей практикой является наличие одного утверждения на тест (хотя это гибко)

В вашем коде на самом деле нет утверждений (их можно было бы добавить, если checkRenumberingValidation возвращает логическое значение вместо того, чтобы генерировать исключение, когда объекты не равны), но условия проверяются адекватно, просто более окольным путем, чем обычно.


Чтобы узнать больше о тестировании, я настоятельно рекомендую JUnit FAQ (написано, когда JUnit 4 был актуален, но почти все концепции могут применяться в целом - это классика)

Другие вопросы по теме