Начало работы с модульным тестированием
Модульное тестирование - это, грубо говоря, тестирование битов вашего кода в изоляции с тестовым кодом. Ближайшие преимущества, которые приходят на ум, следующие:
- Выполнение тестов становится автоматизированным и повторяемым
- Вы можете протестировать на гораздо более гранулированном уровне, чем тестирование точки и щелчка через графический интерфейс
Rytmis
Мой вопрос: каковы текущие "лучшие практики" с точки зрения инструментов, а также когда и где использовать модульное тестирование как часть ежедневного кодирования?
Давайте попробуем быть языковым агностиком и накрыть все основы.
Ответы
Ответ 1
Хорошо, вот некоторые рекомендации от кого-то, кто не unit test столько, сколько он должен... кашлять.
- Убедитесь, что ваши тесты тестируются one
вещь и только одно.
- Записывайте единичные тесты, когда идете. Предпочтительно перед вы пишете код, который вы тестируете.
- Не unit test графический интерфейс.
- Отделите свои проблемы.
- Свести к минимуму зависимости ваших тестов.
- Настроить с помощью mocks.
Ответ 2
Возможно, вам стоит взглянуть на TDD на трех индексных картах и Three Индексные карты легко запоминают суть тестового развития:
Карточка №1. Дядя Бобс Три закона
- Не записывайте производственный код, кроме как пройти тест с ошибкой.
- Напишите только достаточно теста, чтобы продемонстрировать сбой.
- Напишите только достаточный производственный код для прохождения теста.
Карточка № 2: ПЕРВЫЕ принципы
- Быстро: умственно-быстро, как в сотнях или тысячах секунд.
- Изолирован: тест четко изолирует ошибку.
- Повторяется: я могу запускать его повторно, и он будет проходить или терпеть неудачу одинаково каждый раз.
- Самоуверенность: Тест однозначно пропускает.
- Своевременно: Производится в блокировке с небольшими изменениями кода.
Карточка № 3: ядро TDD
- Красный: тест не работает
- Зеленый: тестовые проходы
- Рефакторинг: чистый код и тесты
Ответ 3
Широко используется так называемая xUnit. Он был первоначально разработан для Smalltalk как SUnit, разработанный в JUnit для Java, и теперь он имеет множество других реализаций, таких как NUnit для .Net. Это почти стандарт де-факто - если вы говорите, что используете модульные тесты, большинство других разработчиков предположит, что вы имеете в виду xUnit или подобное.
Ответ 4
Отличным ресурсом для "лучших практик" является Блог тестирования Google, например недавняя публикация на Написание тестового кода - фантастический ресурс. В частности, их еженедельные посты "Тестирование на туалет" отлично подходят для публикации вокруг вашего куба или туалета, поэтому вы всегда можете думать о тестировании.
Ответ 5
Семейство xUnit является основой модульного тестирования. Они интегрированы в Netbeans, Eclipse и многие другие IDE. Они предлагают простое, структурированное решение для модульного тестирования.
Одна вещь, которую я всегда стараюсь делать при написании теста, - это минимизация использования внешнего кода. Под этим я подразумеваю: я стараюсь как можно больше свести к минимуму код установки и разрыва для теста и стараюсь избегать использования как можно большего числа других модулей/блоков кода. Хорошо написанный модульный код не должен требовать слишком большого внешнего кода в его настройке и разрыве.
Ответ 6
NUnit - хороший инструмент для любого из языков .NET.
Единичные тесты могут быть использованы несколькими способами:
- Test Logic
- Увеличить разделение единиц кода. Если вы не можете полностью проверить функцию или раздел кода, то части, которые его составляют, слишком взаимозависимы.
- Разработка приводов, некоторые люди пишут тесты, прежде чем писать код для тестирования. Это заставляет вас думать о том, что вы хотите, чтобы код выполнял, а затем дает вам определенное руководство, когда вы достигли этого.
Ответ 7
Не забывайте о поддержке рефакторинга. ReSharper на .NET обеспечивает автоматический рефакторинг и быстрые исправления недостающего кода. Это означает, что если вы пишете вызов того, чего не существует, ReSharper спросит, хотите ли вы создать недостающую часть.