varan
Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Целесообразность unit-тестов
Очень много литературы по поводу того, насколько круты unit-тесты. Однако мне кажется, что их применение нецелесообразно по нескольким причинам.
1) Время.
Убивается совершенно сумасшедшее количество времени. Сначала пишешь класс + тесты к нему. Потом понимаешь, что надо применить рефакторинг, для чего переписываешь код и все его тесты(!). Потом если надо что-то изменить в классе, опять меняешь код и эти чертовы тесты.
Потом в какой-нибудь SQL таблице добавляется поле, и половина тестов слетает, просто потому, что в них была, например, проверка результата хитрой выборки из базы в таком виде:
$waited_assoc_row = array('id'=>'534', 'name' => 'Ваня');
assertEquals($assoc_row, $waited_assoc_row)
а теперь должна быть такая:
$waited_assoc_row = array('id'=>'534', 'name' => 'Ваня', 'newfield' => 'blablabla');
assertEquals($assoc_row, $waited_assoc_row)
К чему это я? Время на эту ботву ГОРАЗДО БОЛЬШЕ времени, затраченного на отлов хитрой неуловимой ошибки. Тем более, что действительно хитрые ошибки unit-тестами не ловятся.
2. Иногда сами тест-функции довольно сложно написать(может
потребоваться создать много объектов), и в них тоже
могут быть баги (которые тоже надо тестировать?
). Кроме того, сложные тесты сложнее переделывать при рефакторинге.
Есть ли у кого-нибудь соображения на этот счет? Я это спрашиваю потому, что может я просто чего-то недопонимаю.
Очень много литературы по поводу того, насколько круты unit-тесты. Однако мне кажется, что их применение нецелесообразно по нескольким причинам.
1) Время.
Убивается совершенно сумасшедшее количество времени. Сначала пишешь класс + тесты к нему. Потом понимаешь, что надо применить рефакторинг, для чего переписываешь код и все его тесты(!). Потом если надо что-то изменить в классе, опять меняешь код и эти чертовы тесты.
Потом в какой-нибудь SQL таблице добавляется поле, и половина тестов слетает, просто потому, что в них была, например, проверка результата хитрой выборки из базы в таком виде:
$waited_assoc_row = array('id'=>'534', 'name' => 'Ваня');
assertEquals($assoc_row, $waited_assoc_row)
а теперь должна быть такая:
$waited_assoc_row = array('id'=>'534', 'name' => 'Ваня', 'newfield' => 'blablabla');
assertEquals($assoc_row, $waited_assoc_row)
К чему это я? Время на эту ботву ГОРАЗДО БОЛЬШЕ времени, затраченного на отлов хитрой неуловимой ошибки. Тем более, что действительно хитрые ошибки unit-тестами не ловятся.
2. Иногда сами тест-функции довольно сложно написать(может
потребоваться создать много объектов), и в них тоже
могут быть баги (которые тоже надо тестировать?

Есть ли у кого-нибудь соображения на этот счет? Я это спрашиваю потому, что может я просто чего-то недопонимаю.