Какие методы можно использовать, чтобы сделать написание тестов более интересным? - PullRequest
7 голосов
/ 05 января 2010

Я должен признать, что я часто борюсь с практикой разработки через тестирование. Несмотря на использование Ruby on Rails, который делает TDD супер простым, потому что он запечен, я считаю написание тестов таким скучным! Это как зубная нить; Я знаю, что должен сделать это, но изо всех сил стараюсь набрать много энтузиазма.

  • Какие методы вы используете, чтобы сделать написание тестов интересным? Например, один совет, который я увидел, заключался в том, чтобы придумать небольшую историю о данных тестовых приборов, а не просто использовать бессмысленные, не связанные данные.

Ответы [ 7 ]

8 голосов
/ 05 января 2010

Если вы сначала напишете тесты, это ваши спецификации для кодирования.

Все мысли должны быть сделаны при написании тестов. "Что должно сделать?" "Как я узнаю, что это сделано?" «Какие интерфейсы у него есть, которые нужно будет смоделировать?»

Кроме того, если вы структурируете свои тесты, используя простое соглашение об именах (используя «должны»), вы можете легче определить, что должно происходить.

См. http://weblogs.asp.net/rosherove/archive/2005/04/03/TestNamingStandards.aspx для некоторых мыслей по этому поводу.

Если вы пишете тесты в последний раз, они скучны, поскольку вы знаете, код работает.

3 голосов
/ 05 января 2010

Написание отрицательных тестов, как правило, более интересное, чем «солнечный день». Продумайте все изобретательские способы, которыми вы могли бы сломать свой класс (передав нулевое значение, значения слишком большие / маленькие и т. Д.).

Это не только даст вашему мозгу другой угол, чтобы жевать, но и сделает ваш класс более стойким, так как люди будут называть его нулевым, большим числом и т. Д.

2 голосов
/ 05 января 2010

Я боюсь, что это звучит как запах кода .

Скучны ли тесты, потому что они очень повторяющиеся?

Тесты охватывают одни и те же вещи несколько раз? (то есть тестовые случаи не просто проверяют одну вещь за раз, поэтому есть многократное тестирование одной и той же вещи ...?)

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

Звучит так, как будто что-то нужно реорганизовать или хотя бы абстрагировать, чтобы каждый тест выражал только то, что является новым или отличным от остального кода.

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

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

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

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

1 голос
/ 05 января 2010

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

Волнение приходит, когда вы не знаете, что делает ваш код, когда вы не доверяете ему, когда каждый раз, когда вы запускаете его - или отпускаете, - этот маленький парень сидит на вашем плече и кричит "Нет!" Когда вы проводите много времени в отладчике; когда ваш код слишком сложный, запутанный и грубый (не в хорошем смысле) и страшный.

Скука может быть противоположностью волнения, и в этом свете скучно - это хорошо. Один шаг за другим, предсказуемый шаг за предсказуемым шагом, мы пишем хороший простой надежный рабочий код. Красно-зеленый рефакторинг.

Хороший, простой, надежный рабочий код - это то, чем я могу быть полон энтузиазма.

1 голос
/ 05 января 2010

Если вам скучно при написании тестов, значит, вы тестируете не те вещи. Я пишу тесты, когда что-то не получается, когда я чего-то не понимаю или когда появляется что-то новое. Таким образом, мои тесты никогда не бесполезны и не соответствуют политике «100% покрытия кода», и мне никогда не скучно.

0 голосов
/ 05 января 2010

Если вы используете TDD правильно, то вы должны написать тест, прежде чем писать код. Это должен быть хороший тест, чтобы убедиться, что код, который вы пишете, работает, и должен быть небольшим шагом.

Таким образом, это действительно часть разработки. Чем отличается написание одного модульного теста от написания одной функции, необходимой для реализации кода?

Сказать, что вы находите написание тестов скучным, все равно, что сказать: «Я считаю написание ввода / вывода скучным ... могу ли я что-нибудь сделать, чтобы сделать его более интересным?» или "Я считаю, что писать UI скучно .."

Ну, на самом деле написание любого кода может быть скучным или интересным ... но это скорее функция разработчика, чем кода :) Мой друг вынужден писать код для компании, хотя на самом деле он не очень программист, и его комментарий: «Я не понимаю, как вы можете сделать это весь день !!!»

Поскольку вы разработчик, мне кажется, что вам нравится писать код, поэтому реальная проблема заключается в том, что вы не правильно следите за TDD и делаете тесты реальной частью своей разработки. Даже если фреймворк может попытаться сделать это необходимым, вам действительно нужно правильно следовать процессу (т.е. сначала написать тест) и действительно интегрировать его в свою разработку.

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

0 голосов
/ 05 января 2010

Сначала я хочу написать производственный код, поэтому я стараюсь сначала написать тест: ни написание какой-либо строки кода без неудачного теста. Это не всегда возможно, но, по крайней мере, заставляет меня писать тесты.

Затем я пытаюсь сломать написанный мной код, используя граничные тесты, отрицательные случаи, неправильное использование API (например, пропущенные или несколько вызовов инициализации) ...

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

Иногда я получаю удовольствие от имен и номеров, которые я использую для своих тестов (дата рождения, номер любимого игрока, номера телефонов ...).

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