Что такое "единица"?

В контексте модульного тестирования, что такое "единица"?

Ответы

Ответ 1

Обычно я определяю его как один путь выполнения кода с помощью одного метода. Из эмпирического правила следует, что количество единичных тестов, необходимых для тестирования метода, равно или больше, чем метод циклический complexit y number.

Ответ 2

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

Обычно это один класс.

Однако несколько классов существуют изолированно. Таким образом, вам часто приходится макетировать классы, которые взаимодействуют с тестируемым классом.

Следовательно, "единица" (также называемая "приспособлением" ) является одной проверяемой вещью - обычно класс плюс макеты для соавторов.

Вы можете легко протестировать пакет связанных классов с помощью технологии unit test. Мы делаем это все время. В этих светильниках мало или нет.

Фактически, вы можете протестировать все автономные прикладные программы как отдельные "единицы". Мы тоже это делаем. Обеспечение фиксированного набора входов и выходов, чтобы убедиться, что общее приложение делает все правильно.

Ответ 3

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

Ответ 4

По моему опыту дискуссия о том, "что такое единица", является пустой тратой времени.

Что еще важнее, "насколько быстро проходит тест?" Быстрые тесты выполняются со скоростью 100 +/сек. Медленные тесты выполняются достаточно медленно, чтобы вы не рефлексивно запускали их каждый раз, когда вы задумывались.

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

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

Хотите быстрые тесты? Следуйте Michael Feather правила модульного тестирования.

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

Ответ 5

Мы определяем 'unit' как отдельный класс.

Как вы справедливо утверждаете, что "единица" - это двусмысленный термин, и это приводит к путанице, когда разработчики просто используют выражение без добавления деталей. Там, где я работаю, мы нашли время, чтобы определить, что мы имеем в виду, когда говорим "unit test", "приемочный тест" и т.д. Когда кто-то новый присоединяется к команде, они изучают определения, которые у нас есть.

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

Ответ 6

Если я работаю с "единицей", это функция. Это связано с тем, что нам не разрешено использовать в нашей конструкции что-либо помимо функциональной декомпозиции (без ООП). Я согласен на 100% с ответом. По крайней мере, это мой ответ в рамках моей работы во встроенном программировании для управления двигателем и полетом, а также в различных других системах.

Ответ 7

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

Ответ 8

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

Сказав это, я часто использую модульное тестирование при создании элементов в таких "черных ящиках", как помощь в разработке.

Ответ 9

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

Конечно, это мнение вытекает из того, как мы работаем:

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

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

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

Вот что заставляет меня думать, что это хорошее описание.

Ответ 10

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

Метод представляет собой небольшую и часто атомарную (концептуальную) операцию на низком уровне абстракции, поэтому ее следует протестировать

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

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

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

Ответ 11

Это не важно. Конечно, это нормально, вы просите начать работу с модульным тестированием, но я повторяю это, это не важно.

Единица - это что-то вроде строк:

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

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

"Тест более важен, чем единица" (testivus). Хорошим испытанием должно быть:

  • Автоматическое выполнение и диагностика
  • Быстро - вы будете запускать их очень часто
  • Atomic - тест должен проверять только одну вещь.
  • Изолированный - тесты не должны зависеть друг от друга
  • Повторяемость - результат должен быть детерминированным