я так понял, можно замутить это дело для тестов и дебага, и исключения не мутить, я просто исключения воткнул в те места, где явно скрипт не поедет при ошибке, то есть die()
я так понял, можно замутить это дело для тестов и дебага, и исключения не мутить, я просто исключения воткнул в те места, где явно скрипт не поедет при ошибке, то есть die()
Koenig, Короче, утверждения для того, чтобы просто удостовериться, что условие верно.
Исключения следует выбрасывать в исключительной ситуации, при которой продолжение выполнения невозможно. Например, файл не существует, невалидный аргумент, и всё в таком духе.
reaper, относительно assert'ов, это сложный вопрос. Они пришли из компилируемых языков, таких как С, где они удалялись из программы после компиляции.
В некоторых моих проектах я использовал концепцию защищенного программирования. Согласно ей, надо проверять все входные и выходные данные метода. То есть надо проверять все аргументы методов и функций внутри функции. Я делал это и выбрасывал исключения InvalidArgumantException. В этих же проектах я все тщательно тестировал и иногда сталкивался с ситуацией, когда тест не срабатывал из за выброса этих InvalidArgumentException. Благодаря им, я мог быстро локализовать ошибку (неверные входные данные), что нельзя было сделать с помощью тестов. С другой стороны использовать проверку аргументов и выбрасывать InvalidArgumentException довольно накладное решение на продакшене, гораздо эффективнее было бы использовать assert'ы для этих целей, которые так же помогут быстро локализовать ошибку (в том числе в тестах), а на продакшене их можно легко отключить, дабы не перегружать проект.
Другими словами тесты это хорошо, но с их помощью не всегда легко локализовать ошибку. Не стоит бояться того, что код у вас будет "не красивым", assert'ы прекрасно комментируют код:
function log($type, $message){
assert('array_search($type, ["notice", "warning", "error"]) !== false)');
assert('is_string($message) && !empty($message)');
...
}# reaper (14.05.2015 / 21:37)На самом деле не совсем так. Правильнее будет:
Koenig, Короче, утверждения для того, чтобы просто удостовериться, что условие верно.
Исключения следует выбрасывать в исключительной ситуации, при которой продолжение выполнения невозможно. Наприме
# Delphinum (14.05.2015 / 21:31)Да, пожалуй здесь вынужден согласиться. Был не прав.
reaper, вообще assert имеет прямое отношение к отлову багов.
К тестам она имеет опосредственное отношение (однокоренное слово для assertEquals и так далее).
reaper, конечно в тестах используются утверждения, без них никак, в любом фреймворке и языке. Я говорю о том, что функция assert в PHP используется для отлова неверных ожиданий в коде, а assertEquals и т.д. используются для проверки ожиданий в тестах.
Delphinum, Пожалуй надо бы мне подтянуть себя в этом плане. Может книжку какую посоветуешь?
# Delphinum (14.05.2015 / 21:46)Ну это очевидно. Тащить зависимости из тестировочных фреймворков в реальный код -- идиотская затея.
reaper, конечно в тестах используются утверждения, без них никак, в любом фреймворке и языке. Я говорю о том, что функция assert в PHP используется для отлова неверных ожиданий в коде, а assertEquals
reaper, Совершенный код - что касается вопроса - где, как и зачем это использовать?
Экстримальное программирование - что касается вопроса - как тестировать ПО?
Тестирование ОО ПО - что касается тестирования ООП
Delphinum, Благодарю ![]()