Тестирование блоков try-catch в Java - PullRequest
0 голосов
/ 07 ноября 2018

Существует ли какой-либо жизнеспособный способ для проверки , который Exception был перехвачен блоками перехвата в приведенном ниже методе Java, описанном ниже, без изменения его текущей реализации.

public String methodToTest(String text) {
    try
    {
        if (text.contains("something")) {
            throw new CustomException();
        }

        final MyObj myObj = new MyObj(text); //this can throw a MyObjException

        return text;

    } catch (CustomException e) {
        return "An exception has been thrown";
    } catch (MyObjException e) {
        return "An exception has been thrown";
    } catch (Exception e) {
        return "An exception has been thrown";
    }
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вы не должны тестировать реализацию метода, вы должны проверить, что вы ожидали от метода. Вот несколько примеров для метода, который вы предоставляете:

  • Вы ожидаете, что text, содержащий "something", получит "An exception has been thrown":

Тест:

String result = obj.methodToTest("my_something_string");
assertEquals("An exception has been thrown", result);
  • Вы ожидаете, что text, то есть null, получит "An exception has been thrown":

Тест:

String result = obj.methodToTest(null);
assertEquals("An exception has been thrown", result);
  • Вы ожидаете, что text, который недействителен для MyObj, получит "An exception has been thrown"

Тест:

String result = obj.methodToTest("string_not_valid_for_my_obj");
assertEquals("An exception has been thrown", result);

Аналогичным образом протестируйте другие ожидаемые сценарии. Не проверяйте реализацию.

0 голосов
/ 07 ноября 2018

Если ваша миссия состоит в том, чтобы рассматривать функцию как «черный ящик» для целей тестирования, вы можете полагаться только на ее возвращаемое значение, поскольку она перехватывает исключения.

Если возвращаемое значение идентично в каждом случае, как здесь, вы просто не можете различить их.

Ваши попытки тестирования функции не должны опираться на знание ее реализации и не должны существенно изменять работу функции. Поэтому, на мой взгляд, это неудачный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...