Что такое модульное тестирование и как вы это делаете? [дубликат]



точный дубликат многих сообщений:



Что такое юнит-тестирование?
что делает хороший модульный тест?
новое для модульного тестирования
модульное тестирование - определение
Обучение Блок Тестирования
Как правильно издеваться и тест блока
Модульное Тестирование: Вопросы Для Начинающих
и многое другое ...

Кроме того, Google для site:stackoverflow.com "как вам" юнит-тест



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




  • что такое модульное тестирование? Он встроен в код или работает как отдельные программы? Или что-то еще?

  • как вы это делаете?

  • когда это должно быть сделано? Есть ли время или проекты, чтобы не делать этого? Все юнит-тестирования?


большое спасибо за помощь.

504   7  

7 ответов:

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

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

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

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

Что такое юнит-тестирование?

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

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

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

как вы выполняете модульные тесты?

представьте себе очень простую функцию, которую вы хотели бы тест:

int CombineNumbers(int a, int b) {
    return a+b;
}

код модульного теста будет выглядеть примерно так:

void TestCombineNumbers() {
    Assert.IsEqual(CombineNumbers(5, 10), 15); // Assert is an object that is part of your test framework
    Assert.IsEqual(CombineNumbers(1000, -100), 900);
}

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

теперь представьте, что другой разработчик приходит и меняет CombineNumbers() функция для представления, или некоторая другая причина:

int CombineNumbers(int a, int b) {
    return a * b;
}

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

когда следует выполнять модульные тесты?

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

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

что...

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

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

Как...

почти всегда процесс модульного тестирования встроен в IDE (или через расширения) таким образом, что он выполняет тесты с каждой компиляцией. Существует ряд фреймворков для помощи в создании модульных тестов (и даже макетных объектов), часто называемых фуединица (ср. Ин. jUnit, xUnit, nUnit). Эти структуры обеспечивают формализованный способ создания тестов.

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

когда...

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

Что такое unittesting? Это сложно определить. На техническом уровне вы создаете функции, которые вызывают функции в вашей кодовой базе и проверяют результаты. В принципе, вы получаете кучу вещей, таких как "assert(5+3) == 8", просто сложнее(как в DataLayer (MockDatabase ()). getUser (). name == "Dilbert"). На уровне представления инструментов вы добавляете автоматическую проверку проекта, если все по-прежнему работает так, как вы предполагали. Это очень полезно, если вы рефакторинг и если вы реализуете сложный алгоритм. Результатом обычно является куча документации и намного меньше ошибок, потому что поведение кода закреплено.

Я создаю тестовые случаи для всех крайних случаев и запускаю их аналогично работе сборщика мусора поколения. В то время как я реализую класс, я запускаю только тестовые случаи, которые включают класс. Как только я закончу работать над этим классом, я запускаю все unittests, чтобы увидеть, все ли еще работает.

вы должны проверить как насколько это возможно, пока тестовый код достаточно прост, чтобы оставаться непроверенным. Учитывая это, нет, не все можно проверить в здравом уме. Подумайте о пользовательских интерфейсах. Подумайте о драйвере для космического челнока или ядерной бомбы (по крайней мере, не с чистыми JUnit-тестами ;) ). Тем не менее, много и много кода можно проверить. Структуры данных есть. Алгоритмы есть. Большинство Applicationlogic-классов. Так что проверьте это!

НТН. tetha

Я считаю, что самый простой способ проиллюстрировать это-посмотреть на какой-то код. Эта страница начала работы на сайте NUnit является хорошим введением в то, что и как

http://www.nunit.org/index.php?p=quickStart&r=2.5

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

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

что такое модульное тестирование? Это встроенный в код или запустить как отдельный программы? Или что-то еще?

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

по существу, вы пишете небольшие биты кода, чтобы проверить отдельные биты вашего кода. В .net world, вы бы запустить эти небольшие биты кода, используя что-то вроде NUnit или MBunit или даже встроенные средства тестирования в visual studio. В Java вы можете использовать JUnit. По сути, тестовые бегуны будут строить ваш проект, загружать и выполнять модульные тесты, а затем сообщать вам, проходят ли они или терпят неудачу.

Как вы это делаете?

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

когда это должно быть сделано? Есть ли время или проекты, чтобы не делать этого? Есть все юнит-тестирования?

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

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

на части" как это сделать":

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

на части" когда это сделать":

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

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

Comments

    Ничего не найдено.