Как вы модифицируете модульные тесты в базу кода?

Есть ли у вас какие-либо стратегии для переоснащения модульных тестов на базу кода, которая в настоящее время не имеет модульных тестов?

Ответ 2

Лучший способ модифицировать существующий проект без каких-либо модульных тестов - это делать это при исправлении ошибок. Напишите тест, который терпит неудачу в логике, в которой есть ошибка, с шагами по воспроизведению ошибки. Затем реорганизуйте код, пока тесты не пройдут. Теперь вы можете быть уверены, что ошибка исправлена, и она не будет введена позже в цикле, и вы начали вводить модульные тесты в проект.

Ответ 3

Здесь еще одна отличная статья по тестированию. В частности, несколько уместная цитата из этого:

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

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

Ответ 4

Дейл проголосовали. Да, нет никакой выгоды для добавления модульных тестов для кода, который работает. Допустим, есть две неизвестные ошибки X и Y. В какой-то момент X обнаруживается типичным полевым использованием. Вы исправите его, добавьте unit test и перейдите. Теперь предположим, что Y никогда не обнаруживается на протяжении всего времени жизни программы. Поскольку Я никогда не раскрывал себя, как будто он никогда не существовал; не нужно тратить ресурсы. Умножьте это на сотни или тысячи спящих ошибок, и вы избавите себя от избыточного обслуживания.

Ответ 5

Если вы пытаетесь добавить модульные тесты к старым perl-кодом, я настоятельно рекомендую

Perl Testing: ноутбук для разработчиков от Ian Langworth и chromatic.

У этого есть очень хороший трюк при тестировании устаревшего и "неустойчивого" кода.

Ответ 6

Почему вы хотите добавить модульные тесты? Считаете ли вы, что у кода есть ошибки? Вы просто хотите что-то сделать? Вы собираетесь приступить к новой функции?

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

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

Я думаю, что есть возможность написать тесты, даже если у вас нет ошибки для тестирования - когда вы добавляете новые функции или исправляете ошибки позже, ваши тесты подтверждают, что вы не ввели новые ошибки.

Ответ 7

Возможно ли, что мы находимся в панике и путаемся между модульными тестами и тестированием производительности? Является ли это тем, что ваше приложение отлично работает с несколькими пользователями, но начинает бросать ошибки при более тяжелой нагрузке? Если это так, модульные тесты не являются ответом. Единичные тесты!= Загрузка тестов.

Если модульные тесты на самом деле являются ответом, то дооснащение модульных тестов является хорошей идеей, так как это поможет очистить код. Просто будьте готовы реорганизовать много. Код, написанный с TDD, выглядит много иначе, чем код, написанный без TDD. В моем случае у меня был метод HandleDisposition(), который позаботился о многих случаях. Такой метод не существовал бы, если бы мы написали код с TDD. При дооснащении модульных тестов мы реорганизовали эту функцию и теперь имеем такие методы, как XDisposition(), YDisposition(), ZDisposition(), которые намного легче записывать модульные тесты.