Тестирование кода. Разворачиваем проект с помощью Gradle.
Для многих пишущих на ActionScript3 тема тестирования покрыта мраком. Многие хотят использовать тесты, но не знают как начать... поэтому наша цель - создать проект, который не зависит от платформы и редактора, легко разворачивается и пригоден для многократного использования.
В прошлой статье мы разворачивали проект с помощью Apache Ant, в этот раз мы возьмем более современный инструмент - Gradle, если он у Вас не установлен, то необходимо его скачать, распаковать и добавить в переменные окружения путь_к_папке_куда_он_был_распакован/bin.
Первым делом создадим файл содержащий локальные настройки проекта
gradle.properties
Код:
// Путь к flex sdk FLEX_HOME = // Путь к Flash player в котором будут запущены тесты FLASH_PLAYER_EXE = // Версия плеера, этот параметр используется при компиляции TARGET_PLAYER = 19.0 // URL до архива с тестовым фреймворком, вынужденная мера, т.к. ни в одном из доступных репозиториев // нет последних версий библиотек URL_FLEXUNIT = http://www.eu.apache.org/dist/flex/flexunit/4.2.0/binaries/apache-flex-flexunit-4.2.0-4.12.0-bin.zip // Путь к директории временных файлов TMP_DIR = tmp // Путь к библиотекам, которые необходимы для тестирования LIB_FLEXUNIT = lib/flexunit
При использовании системы контроля версий такие файлы добавляются в игнорлист, а в систему контроля версий добавляется gradle.properties.sample - это необходимо чтобы иметь возможность настраивать проект локально
Далее необходимо создать скрипт, который будет запускать тестирование
build.gradle
Код:
buildscript { repositories { mavenLocal() mavenCentral() jcenter() } dependencies { classpath 'org.gradlefx:gradlefx:1.3.0' classpath 'de.undercouch:gradle-download-task:2.0.0' } } apply plugin: 'gradlefx' apply plugin: 'de.undercouch.download' repositories { mavenLocal() mavenCentral() } dependencies { test fileTree(dir: "$LIB_FLEXUNIT/flexunit", include: '*.swc') test fileTree(dir: "$LIB_FLEXUNIT/flexunit", include: '*.jar') } flexHome = FLEX_HOME frameworkLinkage = 'none' type = 'swc' srcDirs = ['src'] testDirs = ['test/src'] flexUnit { command = FLASH_PLAYER_EXE additionalCompilerOptions = [ "-target-player=$TARGET_PLAYER", '-incremental=true' ] } task downloadFlexUnit(type: de.undercouch.gradle.tasks.download.Download) { src URL_FLEXUNIT dest new java.io.File(TMP_DIR, "flexunit.zip") } task downloadAndUnzipFlexUnit(type: Copy) { if (!file("$LIB_FLEXUNIT/flexunit").exists()) { dependsOn downloadFlexUnit from zipTree(downloadFlexUnit.dest) into LIB_FLEXUNIT } } test.dependsOn downloadAndUnzipFlexUnit
Наш тестовый проект готов, но для полноты картины в файле gradle.properties установим путь до flex sdk в константу FLEX_HOME, а в константу FLASH_PLAYER_EXE путь до flash плеера и создадим первый тест в test/src
SimpleTest.as
package { import org.flexunit.asserts.assertTrue; public class SimpleTest { [test] public function alwaysTrue():void { assertTrue(true); } } }
Код:
... [ant:flexunit] [ant:flexunit] Suite: SimpleTest [ant:flexunit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,037 sec [ant:flexunit] [ant:flexunit] Results : [ant:flexunit] [ant:flexunit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,037 sec [ant:flexunit] BUILD SUCCESSFUL
зы
подход со скачиванием zip архива с тестовым фреймворком совсем не хороший, и я по возможности постараюсь залить библиотеки в maven репозиторий, но в данный момент времени на это нет(
Всего комментариев 24
Комментарии
01.11.2015 12:00 | |
Шикардос! Осталось объяснить флешерам, зачем им нужны тесты. Это, по моему опыту, самое сложное
|
01.11.2015 14:39 | |
Возьмите любую соц. игру, и вы поймете, что это не только GUI.
Посмотрите на тот же Starling и Feathers это GUI библиотеки, так вот они покрытыми тестами. Если вам нужны интеграционные тесты взаимодействия данных gui и пользовательских действий - то это материал для целой статьи, а не комментария к этой |
|
Обновил(-а) СлаваRa 01.11.2015 в 14:58
|
02.11.2015 00:52 | |
Игру.
|
02.11.2015 00:56 | |
СлаваRa, игру.
|
02.11.2015 10:22 | |
Игру.
Фреймворки как правило более структурированы, их легче покрыть тестами. |
02.11.2015 12:51 | |
Да, примерчик бы из практики не помешал.
|
02.11.2015 20:06 | |
ну давайте, чтобы интереснее было выбираем игру:
- монополия - lines 97 |
02.11.2015 22:30 | |
Цитата:
ну давайте, чтобы интереснее было выбираем игру:
- монополия - lines 97 Я за линии, в монополии сплошная логика. |
02.11.2015 23:12 | |
мне с детства нравятся две этих игры)) подвоха нет
|
03.11.2015 13:00 | |
Цитата:
автоматически деплоить артефакты из тревиса в релизы на гитхабе
|
03.11.2015 16:38 | |
Не вижу противоречия, поэтому повторяться не буду, дело ваше.
|
05.11.2015 17:24 | |
В 21 веке можно не заставлять, ну по крайней мере, если использовать гитхаб
Можно настроить интеграцию вашего CI-сервера с гитхабом так, чтобы при создании пулл-реквеста запускалась определенная билд-конфигурация, которая прогоняла нужные вам тесты: - code style - юнит или интеграционные тесты - любые другие проверки По результатам билда сервер пушит сообщение на гитхаб с помощью commit status api, ну и человек, проводящий ревью будет уверен, что ваш пул реквест не поломал проект, ну или наоборот - увидит, что все сломалось и пристыдит вас. Вот так выглядят данные статусы на гитхабе |
Последние записи от СлаваRa
- Тестирование кода. Разворачиваем проект с помощью Gradle. (01.11.2015)
- Тестирование кода. Разворачиваем проект с помощью Apache Ant. (01.11.2015)
- [FlashDevelop] Postfix Code Completion (07.09.2015)
- из Flash на HaXe, из HaXe во Flash при участии NME (13.04.2013)
- Подключение ADOBE ASC 2.0 компилятора к FlashDevelop. Русская инструкция. (11.11.2012)