Начало работы с модульным тестированием

Unit testing is, roughly speaking, testing bits of your code in isolation with test code. The immediate advantages that come to mind are:

  • Running the tests becomes automate-able and repeatable
  • You can test at a much more granular level than point-and-click testing via a GUI

Rytmis

Мой вопрос: каковы текущие «лучшие практики» с точки зрения инструментов, а также когда и где использовать модульное тестирование как часть ежедневного кодирования?

Давайте попробуем быть немного агностиком языка и охватить все основы.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
24
0
5 979
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Семейство xUnit - это основа модульного тестирования. Они интегрированы в Netbeans, Eclipse и многие другие IDE. Они предлагают простое структурированное решение для модульного тестирования.

При написании теста я всегда стараюсь минимизировать использование внешнего кода. Под этим я подразумеваю: я стараюсь как можно больше свести к минимуму код установки и разрыва для теста и стараюсь по возможности избегать использования других модулей / блоков кода. Хорошо написанный модульный код не должен требовать слишком большого количества внешнего кода при его настройке и демонтаже.

Широко используется так называемый фреймворк xUnit. Первоначально он был разработан для Smalltalk как SUnit, затем превратился в JUnit для Java и теперь имеет множество других реализаций, таких как NUnit для .Net. Это почти стандарт де-факто - если вы говорите, что используете модульные тесты, большинство других разработчиков подумают, что вы имеете в виду xUnit или аналогичный.

Отличный ресурс для «лучших практик» - это Блог тестирования Google, например, недавний пост на Написание тестируемого кода - фантастический ресурс. В частности, их еженедельные публикации из серии «Тестирование в туалете» отлично подходят для размещения вокруг вашего куба или туалета, чтобы вы всегда могли подумать о тестировании.

Ответ принят как подходящий

Хорошо, вот несколько лучших практик от человека, который не тестирует модули так часто, как должен ... кашляет.

  1. Убедитесь, что ваши тесты проверяют один вещь и только одна вещь.
  2. Пишите модульные тесты по ходу работы. Предпочтительно перед вы пишете код, который вы тестируете.
  3. Не выполняйте модульное тестирование графического интерфейса.
  4. Разделите свои проблемы.
  5. Сведите к минимуму зависимости ваших тестов.
  6. Имитируйте поведение с помощью издевается.

Привет, Джон, не могли бы вы рассказать, почему бы вам не провести модульное тестирование графического интерфейса?

itsmatt 17.09.2008 23:05

Да, пожалуйста, объясните, почему вам не следует тестировать графический интерфейс.

Malfist 30.01.2009 23:36

Вы запускаете различные поведенческие тесты в графическом интерфейсе?

brian_d 20.01.2011 01:14

NUnit - хороший инструмент для любого из языков .NET.

Модульные тесты можно использовать по-разному:

  1. Логика тестирования
  2. Увеличьте разделение кодовых единиц. Если вы не можете полностью протестировать функцию или раздел кода, то составляющие его части слишком взаимозависимы.
  3. Стимулируйте разработку, некоторые люди пишут тесты перед они пишут код для тестирования. Это заставляет вас задуматься о том, какой код вы хотите использовать для делать, а затем дает вам четкое указание, когда вы этого добились.

Вы можете посмотреть TDD на трех индексных картах и Три карточки-указатели, которые помогут легко запомнить суть разработки, основанной на тестировании:

Карточка №1. Три закона дяди Боба

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

Карточка # 2: ПЕРВЫЕ Принципы

  • Быстро: невероятно быстро, сотни или тысячи в секунду.
  • Изолированный: Тест четко изолирует неисправность.
  • Повторяемость: я могу запускать его несколько раз, и каждый раз он будет проходить или терпеть неудачу.
  • Самопроверка: Тест однозначно прошел / не прошел.
  • Своевременность: создается синхронно с небольшими изменениями кода.

Карточка # 3: Ядро TDD

  • Красный: тест не пройден
  • Зеленый: тест пройден
  • Рефакторинг: чистый код и тесты

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

Другие вопросы по теме