Рассмотрим метод, который может выдать исключение с некоторым описательным текстом:
if ($someCondition) {
throw new \Whatever\Exception('dilithium exhausted');
}
А в другом месте метода есть еще один блок, который может вызвать то же исключение, но с другим текстом:
if ($anotherCondition) {
throw new \Whatever\Exception('differentialator exploded');
}
При написании модульных тестов для этого класса вы создаете случаи сбоев, чтобы вы могли убедиться, что эти два исключения были выброшены правильно.В этих случаях сбоя вы предпочитаете:
A) Использовать @exceptionExpected в докблоке тестового метода для перехвата универсального класса \ Whwhat \ Exception и впоследствии игнорировать текст getMessage (), предполагая, что вы получили правильный?(Похоже, это плохая идея.)
или:
B) Используйте try / catch и затем подтвердите, что текст getMessage () уловленного исключения равен точной описательной строке, которую вы ожидаете?(Более устойчивый, но это означает изменение ваших тестов всякий раз, когда вы меняете формулировку ошибки.)
или:
C) Создайте отдельное исключение для каждого случая ошибки (например, \ Whwhat \ DilithiumException и \Независимо от \ diffrentialatorException), а затем используйте @exceptionExpected для каждого.
В настоящее время я использую B, но склоняюсь к C. Мне любопытно, что другие делают в этом же сценарии.Есть ли у вас какие-либо рекомендации, которые помогут вам определить: «В какой момент ошибка заслуживает своего собственного класса исключений по сравнению с более общим классом общего доступа?»