Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Оптимизация процесса создания unit-тестов

Программирование *.NET *C *
Всем привет! Хабраюзер shai_xylyd написал статью про аспекты тестирования, где им были рассмотрены некоторые понятия и ценности TDD. В частности, он упомянул очень интересный способ создания первичных юнит-тестов — когда функциональный код пишется совместно с кодом юнит-теста, чем меня очень заинтриговал.

Дело в том, что я (как программист), нахожусь в состоянии переходного процесса между «классической» разработкой и разработкой test-driven, поэтому всякими способами ищу возможности упростить и сделать более естественной последнюю. После пары приседаний, сразу включиться в методику shai_xylyd не сумел. Начал переписку с автором статьи, где он натолкнул меня на мысль подойти к решению с математической точки зрения. Идея в том, чтобы воспользоваться функциональным пространством среды программирования и «разложить» написание юнит-теста на составляющие. После чего сделать выводы.
Немного математики, а потом пример
Всего голосов 22: ↑18 и ↓4 +14
Просмотры 4.3K
Комментарии 17

Поддержка nUnit в asp.net mvc проектах

Чулан
После установки Asp.net mvc framework ставится ряд template в VS студию. И теперь например при создании проекта «asp.net mvc Web application», в самом начале есть возможность выбрать какой именно test framework используется для разработки. Но к сожалению там всего один пункт для выбора. Уже сейчас есть возможность установить кучу расширений. Так как я для разработки использую nUnit, то найти такой «плагин», было бы не плохо.

Качаем небольшой архив с двумя шаблонами:
  • NUnitDemo
  • NUnitAndRhinoMocks

В архиве находим либо NUnitDemo.zip либо, NUnitAndRhinoMocks.zip и NUnitAndRhinoMocks.reg и NUnitDemo.reg.
Копируем их в "\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Test\1033\"
Далее запускаем «devenv /setup».
Теперь при создании проекта можно дополнительно выбрать еще несколько шаблонов.
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 426
Комментарии 0

.NET и Unit-тестирование: TestCaseAttribute (NUnit 2.5)

Чулан
Заглянув на официальный сайт NUnit, обнаружил интересную новинку в версии 2.5 этой замечательной библиотеки.

Тестировать методы на различных входящих данных стало очень удобно:

[TestCase(12, 3, 4)]
[TestCase(12, 2, 6)]
[TestCase(12, 4, 3)]
[TestCase(12, 0, 0, ExpectedException = typeof(System.DivideByZeroException),
TestName = “DivisionByZeroThrowsExceptionType”)]
[TestCase(12, 0, 0, ExpectedExceptionName = “System.DivideByZeroException”,
TestName = “DivisionByZeroThrowsNamedException”)]
public void IntegerDivisionWithResultPassedToTest(int n, int d, int q)
{
Assert.AreEqual(q, n / d);
}

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

официальная документация
Рейтинг 0
Просмотры 811
Комментарии 0

ASP.NET MVC: модульное тестирование маршрутов

.NET *
imageМодульное тестирование (unit test) очень важная часть современной разработки программного обеспечения. При тестировании web-приложений разработчики стараются охватить все аспекты работы приложения от получения запроса до выдачи результата. При разработке проектов с помощью ASP.NET MVC одним из таких моментов является механизм маршрутизации. Тестирование маршрутов обычно приносило немало головной боли, заставляя разработчика писать много сопутствующего кода. В этой заметке я покажу как используя пару инструментов можно упростить тестирование маршрутов до минимума.
Читать дальше →
Всего голосов 42: ↑28 и ↓14 +14
Просмотры 3.9K
Комментарии 6

White — автоматизация функционального тестирования приложений

Чулан
Существует множество инструментов для автоматизации функционального тестирования приложений. С одной стороны универсальные коммерческие пакеты, настоящие монстры автоматизации – HP QuickTest Pro, SilkTest, TestComplete. С другой – специализированные или «бедные» по функциональности свободные инструменты – Selenium (web-приложения), pyWinAuto, Win32::GuiTest и т.д. Но настоящей жемчужиной среди свободных инструментов, на мой взгляд является Codeplex White Framework.

Не так давно потребовалось автоматизировать некоторое .net приложение. На работе основным инструментом для автоматизации принят QuickTest Pro, но для этого конкретного проекта он был слишком дорог: проект очень небольшой – автоматизации подлежали всего несколько операций. Встал вопром с поиском бесплатной альтернативы.

Первым бы опробован перловый Win32::GuiTest. С задачей он справился, но код скрипта получился очень уж неаккуратный – слишком тяжело его было бы в последствии поддерживать. И тут на сайте codeplex’a был обнаружен White
Он оказался настолько простым и удобным, что было решено применять его. Этот framework поддерживает большинство стандартных контролов Win32, WinForms, WPF (Silverlight), SWT. Под катом пример простой автоматизации Калькулятора Windows XP.
Читать дальше →
Всего голосов 8: ↑6 и ↓2 +4
Просмотры 2.2K
Комментарии 6

Введение в Continuous Integration

Разработка веб-сайтов *
Недавно я попал на новый проект, с задачей создать небольшое приложение с нуля. Разговариваю с тестером:
— А как тебе новые версии поставлять?
— Можешь как все остальные на проекте, через SVN.
— То-есть ты сама билдить будешь?
— Да нет… Бинарники оттуда беру.


Оказывается, очень много программистов, даже имеющих в подписях слова вроде Senior или Superior никогда в жизни не стыкались с понятием CI, или слабо себе представляют что это такое. Не найдя отдельных публикаций на Хабре на эту тему, решил восполнить пробел, а заодно и по возможности заработать желанный инвайт.
Читать дальше →
Всего голосов 104: ↑91 и ↓13 +78
Просмотры 173K
Комментарии 65

Книга The art of Unit Testing with Examples in .NET

.NET *
osherove_coverПервый раз достаточно близко я познакомился с тестированием лет 5-6 назад, как раз начало моей карьеры. Тогда, я помню, мне рассказывали про покрытие кода тестами. Причем никаких Unit тестов меня не просили писать, просто говорили: “вот видишь if с тремя условиями, который ты написал, ты должен проверить все эти три условия”. Подразумевалось, что я, после того как напишу код, должен его проанализировать, и полностью протестировать обычным проходом по интерфейсу приложения. Как вам? Со временем знания в тестировании у меня немного выросли, я немного научился писать тесты. Я до сих пор не видел и не участвовал ни в одном живом проекте, написанным при помощи Test Driven Development (TDD) подхода. Основа моих знаний была в подглядывании того, как делают это коллеги в предыдущей моей конторе, чтении статей (например, у Алесандра Бындю была отличная статья “TDD для начинающих. Ответы на популярные вопросы”), просмотра пару сринкастов. Я решил покончить с безграмотностью и проникнуться темой, для этого я сел за прочтение книги The art of Unit Testing with Examples in .NET. Притом, что в текущей конторе? можно сказать, что тесты пишу только я для своего кода. Нужно быть образцом.
Читать дальше →
Всего голосов 62: ↑50 и ↓12 +38
Просмотры 18K
Комментарии 16

Профайлинг NUnit-тестов .NET Framework 4

Блог компании Developer Soft

С профайлингом приложений наверняка сталкивался каждый, но как часто вам приходилось профайлить тесты?

Как показал мой личный опыт, чтобы успешно выполнить эту задачу для сборки, собранной под .NET Framework 4, требуется выполнить ряд действий, на поиск которых мне пришлось потратить определенное время. Поэтому я решил обобщить полученный опыт в единую компиляцию и сделать ее доступной для того, чтобы другие смогли избежать тех граблей, на которые пришлось наступить мне.
Вариант решения под катом
Всего голосов 31: ↑25 и ↓6 +19
Просмотры 14K
Комментарии 12

Атрибуты в NUnit для реализации Data Driven Tests

.NET *
Начиная с версии NUnit 2.5 содержит ряд замечательных атрибутов, которые смогут упростить жизнь при написании юнит(и не только) тестов, используя методологию Data Driven Tests.
Читать дальше →
Всего голосов 26: ↑14 и ↓12 +2
Просмотры 9.5K
Комментарии 12

Code Coverage по мотивам NUnit тестов в Visual Studio

.NET *
Без лишних проволочек, предположим, что вы попали в следующую ситуацию:
  • у вас есть некоторый .NET проект;
  • для этого проекта вы написали NUnit-тесты (либо они уже написаны);
  • вам торжественно вручили Visual Studio 2008 Team System (или выше) или Visual Studio 2010 Premium (или выше) и поручили провести анализ покрытия кода тестами (aka code coverage).
Путь вам преграждает только одно маленькое «но»: Test Runner, интегрированный в Visual Studio, видит только собственные MSTest'ы, а вашему любимому NUnit'у уделяет ноль внимания и преподносит фунт презрения. Что делать?

Читать дальше →
Всего голосов 8: ↑6 и ↓2 +4
Просмотры 7K
Комментарии 0

Создаем NUnit тесты в BDD стиле

.NET *
Tutorial
Тихим пятничным вечером я заканчивал свой рабочий день покрывая тестами реализованную логику. Названия тестов я тщательно подбирал как и рекомендовал Рой. И вдруг я осознал, что понятное развернутое название теста превратилось в ужастного монстра и совсем перестало быть понятным. И более того перестало помещаться в 120 символов на экране.

И вот я вспомнил что мне где-то встечалось понятиe Behavior-Driven Development и тесты написанные в этом стиле намного читабельнее и понятнее. По запросу «nunit bdd» гугл выдает совсем немного результатов, но этот пост навел меня на интересную мысль. Методы Given и When не дают четкого описания условия и тем более описать больше чем одно условие наглядно не получится. Я решил слегка доработать решение.

Вот, кстати, то самое имя теста:
CreateMonthlyPaymentInvoice_WhenCustomerIsRegularCompany_ShouldCreateMonthlyUsageInvoiceWithoutBankFee.
Жутко, правда?
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 12K
Комментарии 25

Множественные Assertion’ы без прерываний в одном юнит-тесте на примере NUnit

Тестирование IT-систем *.NET *
Из песочницы


В практике юнит-тестирования часто возникает желание сделать несколько Assertion'ов в одном тест-методе. В теории же, такой подход критикуется с двух основных позиций. Во-первых, семантически, один тест должен проверять только один кейс, не разрастаться. Во-вторых, при падении одного из Assertion’ов в цепочке, выполнение теста прервется и мы увидим сообщение об ошибке лишь от него, а до всех остальных дело не дойдет, что не даст наиболее полной картины произошедшего. Первый аргумент безусловно резонен и при написании тестов его всегда следует держать в голове, но фанатичное следование этому принципу зачастую не представляется разумным (пример далее). Устранению же второй проблемы посвящен этот пост. Будет представлен небольшой класс, позволяющий просто и лаконично обеспечить исполнение нескольких Assertion’ов без прерывания выполнения метода и с выводом сообщения об ошибке каждого из них.
Читать дальше →
Всего голосов 17: ↑14 и ↓3 +11
Просмотры 13K
Комментарии 26

ASP.NET MVC Урок E. Тестирование

.NET *ASP *
Tutorial
Цель урока. Научиться создавать тесты для кода. NUnit. Принцип применения TDD. Mock. Юнит-тесты. Интегрированное тестирование. Генерация данных.

Тестирование, принцип TDD, юнит-тестирование и прочее.

Тестирование для меня лично – это тема многих размышлений. Нужны или не нужны тесты? Но никто не будет спорить, что для написания тестов нужны ресурсы.
Рассмотрим два случая:
  1. Мы делаем сайт, показываем заказчику, он высылает список неточностей и дополнительных пожеланий, мы их бодро правим и сайт отдаем заказчику, т.е. выкладываем на его сервер. На его сервер никто не ходит, заказчик понимает, что чуда не произошло и перестает платить за хостинг/домен. Сайт умирает. Нужны ли там тесты?
  2. Мы делаем сайт, показываем заказчику, он высылает список правок, мы их бодро правим, запускаем сайт. Через полгода на сайте 300 уников в день и эта цифра растет изо дня в день. Заказчик постоянно просит новые фичи, старый код начинает разрастаться, и со временем его всё сложнее поддерживать.


Читать дальше →
Всего голосов 125: ↑86 и ↓39 +47
Просмотры 47K
Комментарии 0

Автоматизация тестирования Web-приложений

Разработка веб-сайтов *Тестирование IT-систем *.NET *
Tutorial


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

Путем проб и ошибок мы пришли к следующему технологическому стеку:
  1. SpecFlow (опционально): DSL
  2. NUnit: тестовый фреймворк
  3. PageObject + PageElements: UI-абстракиця
  4. Контекст тестирования (информация о целевом окружении, пользователях системы)
  5. Selenium.WebDriver

Для запуска тестов по расписанию мы используем TFS 2012 и TeamCity.
В статье я опишу, как мы к этому пришли, типовые ошибки и пути их решения.
Читать дальше →
Всего голосов 39: ↑29 и ↓10 +19
Просмотры 96K
Комментарии 18

Введение в модульное тестирование для c# проектов в среде MonoDevelop

Программирование *TDD *C# *
Из песочницы
Tutorial
Модульные тесты используются при разработке программного обеспечения. Они могут быть созданы как после написания исходного кода, так и до этого, все зависит от ваших предпочтений и вероисповедания, либо предпочтений вашей компании. Разработка через тестирование(TDD) вызывает довольно спорное впечатление. Кто-то считает, что это довольно бесполезная вещь, однако склонен не согласиться. Бесполезным TDD назвать точно нельзя. Создание теста покрывающего предполагаемое изменение в программе, а затем написание кода который бы позволил пройти этот тест, заметно упрощает разработку. Модульные тесты так же используются для проверки уже созданного функционала. Однако достичь 100% покрытия кода программы модульными тестами практически невозможно.
Читать дальше →
Всего голосов 25: ↑20 и ↓5 +15
Просмотры 36K
Комментарии 10

Как тестировать код финализатора (c#)

Тестирование IT-систем *.NET *C# *
Одной из не очевидных задач, является тестирование кода, реализованного в финализаторе дотнетовского класса.
Данная заметка рассматривает один из способов решения этой задачи.

Читать дальше →
Всего голосов 28: ↑21 и ↓7 +14
Просмотры 12K
Комментарии 65

Есть ли жизнь без Resharper-а — 2?

.NET *Visual Studio *C# *
После проверки того, что можно как то делать навигацию в студии и без решарпера, решил исследовать следующий важный для меня сценарий: а именно unit тестирование в студии (с использованием тестового фреймворка nunit).

Читать дальше →
Всего голосов 20: ↑17 и ↓3 +14
Просмотры 11K
Комментарии 10

Настройка TeamCity для новичков

Блог компании Контур .NET *C# *
Tutorial
Эта статья в первую очередь пригодится тем, кто использует тот же стек технологий, что и наша команда, а именно: ASP.NET, C#, NUnit, Selenium 2, git, MSBuild. Будут рассмотрены такие задачи, как интеграция с git, сборка C#-проектов, NUnit-тесты (как модульные, так и тесты UI), а также деплой на сервер. Впрочем, наверняка найдётся интересное и для других пользователей, кроме разве что съевших на этом вопросе собаку. Но они опять же смогут обратить внимание на ошибки в статье или что-то посоветовать: например, как оптимизировать фазу деплоя.
Читать дальше →
Всего голосов 39: ↑35 и ↓4 +31
Просмотры 144K
Комментарии 12

Автоматизация тестирования. Начало пути

Тестирование IT-систем *
Из песочницы
Добрый день, Хабр!

Темой сегодняшней статьи будет автоматизация функционального тестирования веб-приложений. Точнее говоря, не сама автоматизация, как вид тестирования, а быстрый старт в этом, безусловно, увлекательном деле.
Многие тестеры, занимающиеся проведением функционального и регрессионного тестирования, рано или поздно приходят к мысли об автоматизации процесса, т.к. совершенно точно можно сказать, что выполнение одних и тех же регрессионных кейсов со временем ужасно надоедает.
Статья рассчитана на людей, которые только-только подходят к этой мысли и не знают думают, с чего бы им начать свой путь в автоматизации.
Кого заинтересовало, прошу под кат.
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 106K
Комментарии 14

Как тестировать код финализатора (c#). Послесловие: тест все-таки упал

Тестирование IT-систем *.NET *C# *
Уже довольно давно я опубликовал пост «Как тестировать код финализатора (c#)», в котором делился опытом тестирования кода, реализованного в финализаторе. Не прошло и года, как тест все-таки упал. Подробности под катом.
Читать дальше →
Всего голосов 18: ↑14 и ↓4 +10
Просмотры 9.9K
Комментарии 61
1