Автоматизированное тестирование с дунит
человеку свойственно ошибаться - автоматизированное тестирование кода Delphi с Дунит. Крис Голко
для внесения ошибок-это проблема человека, как правило, не фиксируя их, но найти их, прежде чем ваши клиенты. Сюда приходят автоматизированные инструменты тестирования на помощь, с их способностью повторять процесс тестирования беспощадно, так что разработчики могут работать с гораздо большей уверенностью. Почему выбирают Дунит? Ведь речь идет о тестировании блок (блок в смысле построения блок кода, а не объект Паскаль блок). Еще одно преимущество заключается в том, что Дунит тесты систем, в рамках которой выполняется код, который быстрее и удобнее, чем запуск всего приложения. Что мне нравится больше всего в Дунит, что я могу создать мои тестовые случаи с моим любимым инструментом развития. Дунит поддерживает Делфи с 4 по 7, а также Килик.
начало работы
Дунит распространяется в виде исходного кода, она состоит из Делфи исходные файлы, примеры и документация. Он может быть загружен с веб-страницы проекта на sourceforge на sourceforge.объем:/проекты/дунит. Для того чтобы установить, просто распакуйте файлы в директорию по вашему выбору, сохранив в подкаталогах. Единицы измерения, используемые для создания и запуска тестов в 'источник' подкаталоге, который должен быть добавлен к пути к библиотеке в среду, параметры|библиотеки или пути поиска проекта|параметры тестового проекта<.бр />
как писать тест-кейсы и
это легко: все, что вам нужно сделать, это создать класс, унаследованный от TTestCase, TTestCase объявлен в TestFramework блок. Чтобы добавить тесты в тест-классе, просто добавьте опубликовано процедуру для каждого теста в производном классе. Объект тестов использует rtti для выявления какие анализы доступны в тестовом случае класса.
есть два очень полезных методов: установки и teardown. Выполнение каждого теста в классе начинается с установки, а затем приходит опубликованные процедура, которая представляет собой тест, который затем последует демонтаж. Установка может использоваться, чтобы инстанцировать объекты, необходимые для выполнения тестов и инициализации своих государств по операциям теста. Программа установки должна также содержать действий, которые надо произвести перед каждым тестом выполняется, как подключение к базе данных. Разобрала метод должен быть использован для очистки и утилизации объектов.
по опубликованной схеме, как правило, содержит несколько вызовов метода проверки. Проверка метод объявляется следующим образом:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
процедура проверить(условие: логическое сообщение: строка = ") виртуальный
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
на состояние параметр, как правило, в виде выражения, которое оценивается как Булево значение. Если выражение, переданное в процедуру проверки имеет значение false, то тест помечается как сбойный и выполнение теста прерывается.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
...
проверьте(ожидаемый = фактическое, 'фактическое количество разных, чем ожидалось')
...
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
тесты сгруппированы в пучки, называемые сьюты. Наборы тестов могут содержать несколько тестов и других тестов, таким образом предоставляя возможность строить дерево испытаний. Центр для операций Дунит является тест реестра, который хранит все люксы в тестовом приложении. Как правило, тест реестре построена в то время как тестовое приложение инициализирует. Единицы, которые декларируют тесты по Конвенции имеется раздел инициализации, где тесты создаются и добавляются в реестр.
наборы тестов могут быть созданы путем создания экземпляра класса TTestSuite объявлен в TestFramework. Наиболее удобным и часто используемым способом для создания тестов заключается в использовании метода люкс класса TTestCase, который создает новый TTestSuite содержащий только пример: обратите внимание, что это метод класса.
В RegisterTest и RegisterTests процедуры добавление тестов или тестов на проверку реестра. Самый простой пример-создать набор тестов, содержащий один тестовый случай, а затем зарегистрировать ее следующим образом:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
В рамках.RegisterTest(TMyTest.Люкс)
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
как выполнять тесты и
В Дунит включает в себя два стандартных тестов классы: TGUITestRunner с интерактивным графическим интерфейсом и TTextTestRunner с пакетном режиме интерфейс командной строки. TGUITestRunner объявлена в блоке GUITestRunner вместе с RunRegisteredTests самостоятельную процедуру, которая проходит зарегистрированных тестов, используя TGUITestRunner. Расширения CLX версия TGUITextRunner объявлена в блоке QGUITestRunner.
TTextTestRunner объявлен TextTestRunner блок вместе с соответствующим RunRegisteredTests самостоятельную процедуру. Звонки на RunRegisteredTest, обычно относятся с блоком название, поскольку существует несколько глобальных RunRegisteredTests процедур, например:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
GUITestRunner.RunRegisteredTest
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
существующих пользователей Дунит заметить, что одним из последних изменений в Дунит является добавление RunRegisteredTests класс методы и осуждения отдельных RunRegisteredTests, после нескольких глобальных процедур с одинаковыми именами излишне загромождать пространство имен. Вызов RunRegisteredTests сейчас рекомендуется быть дополнены тестов имя класса, а не полностью имя:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
TGUITestRunner.RunRegisteredTest
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
пример использования
давайте положить все это на практике. Пример приложение собирает рейтинги в сторону, что многие веб-сайты предоставляют возможность оценить "этот сайт". В частности, CodeCentral имеет интересную систему рейтинга, где вы можете задать выбор по вашим личным предпочтениям (мой фаворит-древнегреческая мифология). Основная логика нашей рейтинговой системы определяется интерфейсом IRateCollector.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
IRatingCollector = интерфейс
& фитоэстрогены & мочекаменная функция GetPrompt: строку
& покупка & покупка процедура стоимость(Оценщик: строка выбора: целое число)
& евро & евро GetChoiceCount функции: число
& фитоэстрогены & мочекаменная функция GetChoice(на выбор: целое): строка;
& фитоэстрогены & мочекаменная функция GetChoiceRatings(на выбор: целое число): целое число,
& евро & евро GetRatingCount функции: число
& покупка & покупка функции GetRating(Индекс: целое вар Оценщик: строковые): целое число
& фитоэстрогены & мочекаменная функция GetRatersRating(Тарификатор: строковые): целое число
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
В TRateTests класс позволяет нам разрабатывать и тестировать бизнес-логику отдельно от разработки пользовательского интерфейса. Это на самом деле выгодно разрабатывать и тестировать бизнес-логику перед началом пользовательского интерфейса. Тестовые наборы предназначены для проверки любой реализации IRatingCollector.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
TRateTests = класс(TTestCase)
частные
& евро & евро FRateCollector: IRatingCollector
В защищенном
& фитоэстрогены & мочекаменная процедуру настройки переопределить
& покупка & покупка процедура демонтажа переопределить
опубликовано
& покупка & покупка // испытаний
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
<див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ">див> <див класс="блок-внутренний"> <див класс="содержание"> див> <див класс="блок-дна">див> див> див> див><див класс='embed_block_1'><див>див>див>
Установка и удаление процедуры используются для создания и распоряжаться реализация IRatingCollector.
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
константный
& евро & евро SAMPLE_RATE_PROMPT = 'ставка Дунит (мифологического Славянского женского рода)'
& евро & евро SAMPLE_RATE_CHOICES: массив[0..3] из string = ('Лада', 'Юрате', 'Marzanna', 'Баба Яга')
процедура TRateTests.Настройки
и начинается
и & покупка & покупка // измените эту строку только для проверки другой реализации IRatingCollector
& покупка & покупка FRateCollector := TSimpleRatingCollector.Создать(SAMPLE_RATE_PROMPT, SAMPLE_RATE_CHOICES)
В конце
процедура TRateTests.Демонтаж и
и начинается
и & покупка & покупка FRateCollector := мь
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
процедур, заявил в опубликованном каталоге являются базовыми для тестирования написание их требует изобретательности и творчества. В нашем примере, TestChoices проверяет, если список возможных вариантов, как ожидалось.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
процедура TRateTests.TestChoices
вар
& евро & евро я: целое число
и начинается
и & евро & евро Регистрация(FRatingCollector.GetChoiceCount = Длина(SAMPLE_RATE_CHOICES),
& евро & евро & евро & евро & евро Формат (там должно быть ровно %D выбор',
& евро & евро & евро & евро & евро & евро & евро & евро Длина(SAMPLE_RATE_CHOICES)]))
& покупка & покупка для i := 0 до FRatingCollector.GetChoiceCount - 1 сделать
& евро & евро & евро & евро Регистрация(FRatingCollector.GetChoice(я) = SAMPLE_RATE_CHOICES[я], SAMPLE_RATE_CHOICES
& евро & евро & евро & евро & евро & евро & евро & евро & евро & евро 'ожидаемый' [я]) в
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
В TestRate процедура проверки, если в результате выполнения которой процедура приводит к увеличению количества ставок по рейтингу выбор:
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
процедура TestRate
...
& евро & евро FRatingCollector.Ставка(NextRater, 0)
& фитоэстрогены & мочекаменная проверить(FRatingCollector.GetRatingCount = RatingCount 1,
& евро & евро & евро & евро & евро & евро 'ожидаемый' IntToStr(RatingCount 1))
...
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
тесты должны быть столь всеобъемлющим, как это возможно, но очень трудно охватить все возможные сценарии. В то время как ошибки не сообщается, испытания должны быть пересмотрены.
это очень важно, чтобы тесты для экстремальных условий в нашем примере, выбор или оценщик прошли курс процедуры может быть недействительным. Тесты проверить, если исключение возникает, когда ожидается исключение. Следующий код проверяет, если исключение EinvalidRater возникает, когда оценщик пытается оценить второй раз.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
ErrorAsExpected := ложь
Оценщик := NextRater
и в
& евро & евро FRatingCollector.Тарифа(Тарификатор, 0)
& покупка & покупка FRatingCollector.Тарифа(Тарификатор, 0)
кроме того,
В & покупка & покупка // исключением ожидаемых
& покупка & покупка на e:EInvalidRater сделать
& евро & евро & евро & евро ErrorAsExpected := истина
В конце
проверьте(ErrorAsExpected, 'исключение должным образом, если оценщик уже оценили')
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
наконец, Регистрация теста в секции инициализации:
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
RegisterTest('тестирование', [TRateTests.Люкс])
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
В файле проекта показывает типичный способ для запуска тестов в графическом режиме.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
GUITestRunner.runRegisteredTests
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
для использования СLX, а не в VCL, заменить GUITestRunner с QGUITestRunner в квалифицированных звонки на runRegisteredTests, а также в использования пункт.
Экстрим кросс-платформенного программирования и
при переносе Дунит для Килик, есть две категории проблем, разница между Windows и Linux, системные вызовы и различия между приложений VCL и CLX. На удивление, охватывающее различия ОС проще. Первый шаг-это поставить условные операторы в используется положения, единицы, таких как Windows или сообщения, разумеется, не существующих в Килик прототипов базовых системных вызовов можно найти в блоке libc и основных определений типов в типы и QT условных единиц. Некоторые функции системы были заменены на Линукс эквиваленты, другие должны быть реализованы.
он принял ряд трюков в порт в. CLX CLX и визуальных компонентов VCL отличаются незначительно, но, несмотря на это, иногда перенос может быть довольно трудно.
Дунит для Delphi и kylix компилируется из одного источника за исключением GUITestRunner/QGUITestRunner графический тест бегунов, однако есть много условных операторов в источник, чтобы включить эту кросс-платформенную поддержку.
и это только начало
когда азы были освоены, есть много дополнительных возможностей в Дунит, которые позволяют более сложные тесты должны быть выполнены. Например, есть готовые классы, которые можно использовать для конкретных целей, таких как испытания на утечку памяти. Блок TestExtension содержит ряд полезных классов на основе шаблона проектирования декоратор. Одним из самых важных является класс TRepeatedTest, который позволяет выполнять тестовый случай в заданное число раз. В этом примере, TRepeatedTest используется для вызова процедуры, в которой несколько раз подряд.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
RegisterTest('Повторный курс',
& евро & евро TRepeatedTest.Создать(TRateTests.Создать('CheckRate'), 5))
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
класс TGUITestCase, поддерживает тестирование графического интерфейса. TGUITestCase объявлена в блоке GUITesting. Смотри блок RateGUITests пример использования его для проверки диалоговое окно для отправки клиентов.
как в Делфи источник для Дунит находится в свободном доступе, поэтому опытный Разработчик на Delphi может легко расширить Дунит, например, путем создания новых расширений.
тестирование как освобожденного искусства
тестирование приносит лучшие результаты, если тесты основаны на знании дизайн приложения. Если UML-диаграммы были созданы, они могут быть использованы в качестве основы для построения тестов, тем самым выполнив требование, анализ, внедрение, тестирование цикла.
в идеале тесты должны быть разработаны в то же время, как разработка проекта кодекса. Технически, тесты могут быть созданы для приложений, которые уже завершены, однако, эти приложения часто не подходит для модульного тестирования, так как они не имеют хорошо развитую модульную структуру. Используя автоматизированное тестирование с Дунит способствует лучшему дизайн приложения, а также делает его легче отрефакторить код, но я думаю, что самая большая разница находится на стадии обеспечения заявки. Попечителями могут быть назначены блоки (в смысле модулей) вместо того, чтобы завершить проекты, и они могут исправить ошибку и испытания агрегатов без сборки и тестирования всего приложения. Иногда проблема может быть решена на уровне подразделений и участия опытного разработчика необходимо, но в случае большого приложения аморфны, опытные разработчики должны быть задействованы все время.
ир><дел стиль= \ ясно:оба поплавка:нет'>дел><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная див>
Автоматизированное тестирование с дунит
Автоматизированное тестирование с дунит : Несколько тысяч советов, которые сделают вашу жизнь проще.
человеку свойственно ошибаться - автоматизированное тестирование кода Delphi с Дунит. Крис Голко
для внесения ошибок-это проблема человека, как правило, не фиксируя их, но найти их, прежде чем ваши клиенты. Сюда приходят автоматизированные инструменты тестирования на помощь, с их способностью повторять процесс тестирования беспощадно, так что разработчики могут работать с гораздо большей уверенностью. Почему выбирают Дунит? Ведь речь идет о тестировании блок (блок в смысле построения блок кода, а не объект Паскаль блок). Еще одно преимущество заключается в том, что Дунит тесты систем, в рамках которой выполняется код, который быстрее и удобнее, чем запуск всего приложения. Что мне нравится больше всего в Дунит, что я могу создать мои тестовые случаи с моим любимым инструментом развития. Дунит поддерживает Делфи с 4 по 7, а также Килик.
начало работы
Дунит распространяется в виде исходного кода, она состоит из Делфи исходные файлы, примеры и документация. Он может быть загружен с веб-страницы проекта на sourceforge на sourceforge.объем:/проекты/дунит. Для того чтобы установить, просто распакуйте файлы в директорию по вашему выбору, сохранив в подкаталогах. Единицы измерения, используемые для создания и запуска тестов в 'источник' подкаталоге, который должен быть добавлен к пути к библиотеке в среду, параметры|библиотеки или пути поиска проекта|параметры тестового проекта<.бр />
как писать тест-кейсы и
это легко: все, что вам нужно сделать, это создать класс, унаследованный от TTestCase, TTestCase объявлен в TestFramework блок. Чтобы добавить тесты в тест-классе, просто добавьте опубликовано процедуру для каждого теста в производном классе. Объект тестов использует rtti для выявления какие анализы доступны в тестовом случае класса.
есть два очень полезных методов: установки и teardown. Выполнение каждого теста в классе начинается с установки, а затем приходит опубликованные процедура, которая представляет собой тест, который затем последует демонтаж. Установка может использоваться, чтобы инстанцировать объекты, необходимые для выполнения тестов и инициализации своих государств по операциям теста. Программа установки должна также содержать действий, которые надо произвести перед каждым тестом выполняется, как подключение к базе данных. Разобрала метод должен быть использован для очистки и утилизации объектов.
по опубликованной схеме, как правило, содержит несколько вызовов метода проверки. Проверка метод объявляется следующим образом:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
процедура проверить(условие: логическое сообщение: строка = ") виртуальный
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
на состояние параметр, как правило, в виде выражения, которое оценивается как Булево значение. Если выражение, переданное в процедуру проверки имеет значение false, то тест помечается как сбойный и выполнение теста прерывается.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
...
проверьте(ожидаемый = фактическое, 'фактическое количество разных, чем ожидалось')
...
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
тесты сгруппированы в пучки, называемые сьюты. Наборы тестов могут содержать несколько тестов и других тестов, таким образом предоставляя возможность строить дерево испытаний. Центр для операций Дунит является тест реестра, который хранит все люксы в тестовом приложении. Как правило, тест реестре построена в то время как тестовое приложение инициализирует. Единицы, которые декларируют тесты по Конвенции имеется раздел инициализации, где тесты создаются и добавляются в реестр.
наборы тестов могут быть созданы путем создания экземпляра класса TTestSuite объявлен в TestFramework. Наиболее удобным и часто используемым способом для создания тестов заключается в использовании метода люкс класса TTestCase, который создает новый TTestSuite содержащий только пример: обратите внимание, что это метод класса.
В RegisterTest и RegisterTests процедуры добавление тестов или тестов на проверку реестра. Самый простой пример-создать набор тестов, содержащий один тестовый случай, а затем зарегистрировать ее следующим образом:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
В рамках.RegisterTest(TMyTest.Люкс)
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
как выполнять тесты и
В Дунит включает в себя два стандартных тестов классы: TGUITestRunner с интерактивным графическим интерфейсом и TTextTestRunner с пакетном режиме интерфейс командной строки. TGUITestRunner объявлена в блоке GUITestRunner вместе с RunRegisteredTests самостоятельную процедуру, которая проходит зарегистрированных тестов, используя TGUITestRunner. Расширения CLX версия TGUITextRunner объявлена в блоке QGUITestRunner.
TTextTestRunner объявлен TextTestRunner блок вместе с соответствующим RunRegisteredTests самостоятельную процедуру. Звонки на RunRegisteredTest, обычно относятся с блоком название, поскольку существует несколько глобальных RunRegisteredTests процедур, например:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
GUITestRunner.RunRegisteredTest
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
существующих пользователей Дунит заметить, что одним из последних изменений в Дунит является добавление RunRegisteredTests класс методы и осуждения отдельных RunRegisteredTests, после нескольких глобальных процедур с одинаковыми именами излишне загромождать пространство имен. Вызов RunRegisteredTests сейчас рекомендуется быть дополнены тестов имя класса, а не полностью имя:
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
TGUITestRunner.RunRegisteredTest
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
пример использования
давайте положить все это на практике. Пример приложение собирает рейтинги в сторону, что многие веб-сайты предоставляют возможность оценить "этот сайт". В частности, CodeCentral имеет интересную систему рейтинга, где вы можете задать выбор по вашим личным предпочтениям (мой фаворит-древнегреческая мифология). Основная логика нашей рейтинговой системы определяется интерфейсом IRateCollector.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
IRatingCollector = интерфейс
& фитоэстрогены & мочекаменная функция GetPrompt: строку
& покупка & покупка процедура стоимость(Оценщик: строка выбора: целое число)
& евро & евро GetChoiceCount функции: число
& фитоэстрогены & мочекаменная функция GetChoice(на выбор: целое): строка;
& фитоэстрогены & мочекаменная функция GetChoiceRatings(на выбор: целое число): целое число,
& евро & евро GetRatingCount функции: число
& покупка & покупка функции GetRating(Индекс: целое вар Оценщик: строковые): целое число
& фитоэстрогены & мочекаменная функция GetRatersRating(Тарификатор: строковые): целое число
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
В TRateTests класс позволяет нам разрабатывать и тестировать бизнес-логику отдельно от разработки пользовательского интерфейса. Это на самом деле выгодно разрабатывать и тестировать бизнес-логику перед началом пользовательского интерфейса. Тестовые наборы предназначены для проверки любой реализации IRatingCollector.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
TRateTests = класс(TTestCase)
частные
& евро & евро FRateCollector: IRatingCollector
В защищенном
& фитоэстрогены & мочекаменная процедуру настройки переопределить
& покупка & покупка процедура демонтажа переопределить
опубликовано
& покупка & покупка // испытаний
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
<див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ">див> <див класс="блок-внутренний"> <див класс="содержание"> див> <див класс="блок-дна">див> див> див> див><див класс='embed_block_1'><див>див>див>
Установка и удаление процедуры используются для создания и распоряжаться реализация IRatingCollector.
р><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
константный
& евро & евро SAMPLE_RATE_PROMPT = 'ставка Дунит (мифологического Славянского женского рода)'
& евро & евро SAMPLE_RATE_CHOICES: массив[0..3] из string = ('Лада', 'Юрате', 'Marzanna', 'Баба Яга')
процедура TRateTests.Настройки
и начинается
и & покупка & покупка // измените эту строку только для проверки другой реализации IRatingCollector
& покупка & покупка FRateCollector := TSimpleRatingCollector.Создать(SAMPLE_RATE_PROMPT, SAMPLE_RATE_CHOICES)
В конце
процедура TRateTests.Демонтаж и
и начинается
и & покупка & покупка FRateCollector := мь
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
процедур, заявил в опубликованном каталоге являются базовыми для тестирования написание их требует изобретательности и творчества. В нашем примере, TestChoices проверяет, если список возможных вариантов, как ожидалось.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
процедура TRateTests.TestChoices
вар
& евро & евро я: целое число
и начинается
и & евро & евро Регистрация(FRatingCollector.GetChoiceCount = Длина(SAMPLE_RATE_CHOICES),
& евро & евро & евро & евро & евро Формат (там должно быть ровно %D выбор',
& евро & евро & евро & евро & евро & евро & евро & евро Длина(SAMPLE_RATE_CHOICES)]))
& покупка & покупка для i := 0 до FRatingCollector.GetChoiceCount - 1 сделать
& евро & евро & евро & евро Регистрация(FRatingCollector.GetChoice(я) = SAMPLE_RATE_CHOICES[я], SAMPLE_RATE_CHOICES
& евро & евро & евро & евро & евро & евро & евро & евро & евро & евро 'ожидаемый' [я]) в
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
В TestRate процедура проверки, если в результате выполнения которой процедура приводит к увеличению количества ставок по рейтингу выбор:
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
процедура TestRate
...
& евро & евро FRatingCollector.Ставка(NextRater, 0)
& фитоэстрогены & мочекаменная проверить(FRatingCollector.GetRatingCount = RatingCount 1,
& евро & евро & евро & евро & евро & евро 'ожидаемый' IntToStr(RatingCount 1))
...
В конце
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
тесты должны быть столь всеобъемлющим, как это возможно, но очень трудно охватить все возможные сценарии. В то время как ошибки не сообщается, испытания должны быть пересмотрены.
это очень важно, чтобы тесты для экстремальных условий в нашем примере, выбор или оценщик прошли курс процедуры может быть недействительным. Тесты проверить, если исключение возникает, когда ожидается исключение. Следующий код проверяет, если исключение EinvalidRater возникает, когда оценщик пытается оценить второй раз.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
ErrorAsExpected := ложь
Оценщик := NextRater
и в
& евро & евро FRatingCollector.Тарифа(Тарификатор, 0)
& покупка & покупка FRatingCollector.Тарифа(Тарификатор, 0)
кроме того,
В & покупка & покупка // исключением ожидаемых
& покупка & покупка на e:EInvalidRater сделать
& евро & евро & евро & евро ErrorAsExpected := истина
В конце
проверьте(ErrorAsExpected, 'исключение должным образом, если оценщик уже оценили')
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
наконец, Регистрация теста в секции инициализации:
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
RegisterTest('тестирование', [TRateTests.Люкс])
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
В файле проекта показывает типичный способ для запуска тестов в графическом режиме.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
GUITestRunner.runRegisteredTests
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
для использования СLX, а не в VCL, заменить GUITestRunner с QGUITestRunner в квалифицированных звонки на runRegisteredTests, а также в использования пункт.
Экстрим кросс-платформенного программирования и
при переносе Дунит для Килик, есть две категории проблем, разница между Windows и Linux, системные вызовы и различия между приложений VCL и CLX. На удивление, охватывающее различия ОС проще. Первый шаг-это поставить условные операторы в используется положения, единицы, таких как Windows или сообщения, разумеется, не существующих в Килик прототипов базовых системных вызовов можно найти в блоке libc и основных определений типов в типы и QT условных единиц. Некоторые функции системы были заменены на Линукс эквиваленты, другие должны быть реализованы.
он принял ряд трюков в порт в. CLX CLX и визуальных компонентов VCL отличаются незначительно, но, несмотря на это, иногда перенос может быть довольно трудно.
Дунит для Delphi и kylix компилируется из одного источника за исключением GUITestRunner/QGUITestRunner графический тест бегунов, однако есть много условных операторов в источник, чтобы включить эту кросс-платформенную поддержку.
и это только начало
когда азы были освоены, есть много дополнительных возможностей в Дунит, которые позволяют более сложные тесты должны быть выполнены. Например, есть готовые классы, которые можно использовать для конкретных целей, таких как испытания на утечку памяти. Блок TestExtension содержит ряд полезных классов на основе шаблона проектирования декоратор. Одним из самых важных является класс TRepeatedTest, который позволяет выполнять тестовый случай в заданное число раз. В этом примере, TRepeatedTest используется для вызова процедуры, в которой несколько раз подряд.
ир><р класса="step_content "><Ширина таблицы="80%" границы="1"><тр><тд для bgcolor="#F8F8F8">
RegisterTest('Повторный курс',
& евро & евро TRepeatedTest.Создать(TRateTests.Создать('CheckRate'), 5))
тд>тр>р><р класса="step_content ">Таблица>р><р класса="step_content ">
класс TGUITestCase, поддерживает тестирование графического интерфейса. TGUITestCase объявлена в блоке GUITesting. Смотри блок RateGUITests пример использования его для проверки диалоговое окно для отправки клиентов.
как в Делфи источник для Дунит находится в свободном доступе, поэтому опытный Разработчик на Delphi может легко расширить Дунит, например, путем создания новых расширений.
тестирование как освобожденного искусства
тестирование приносит лучшие результаты, если тесты основаны на знании дизайн приложения. Если UML-диаграммы были созданы, они могут быть использованы в качестве основы для построения тестов, тем самым выполнив требование, анализ, внедрение, тестирование цикла.
в идеале тесты должны быть разработаны в то же время, как разработка проекта кодекса. Технически, тесты могут быть созданы для приложений, которые уже завершены, однако, эти приложения часто не подходит для модульного тестирования, так как они не имеют хорошо развитую модульную структуру. Используя автоматизированное тестирование с Дунит способствует лучшему дизайн приложения, а также делает его легче отрефакторить код, но я думаю, что самая большая разница находится на стадии обеспечения заявки. Попечителями могут быть назначены блоки (в смысле модулей) вместо того, чтобы завершить проекты, и они могут исправить ошибку и испытания агрегатов без сборки и тестирования всего приложения. Иногда проблема может быть решена на уровне подразделений и участия опытного разработчика необходимо, но в случае большого приложения аморфны, опытные разработчики должны быть задействованы все время.
ир><дел стиль= \ ясно:оба поплавка:нет'>дел><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная див>
Автоматизированное тестирование с дунит
By russiatips
Автоматизированное тестирование с дунит : Несколько тысяч советов, которые сделают вашу жизнь проще.