Я создаю мобильное приложение с Flex 4.11.0 и AIR 4.0. Моя IDE - Flash Builder 4.7. Я написал много модульных тестов, некоторые из которых используют функции AIR, такие как доступ к файловой системе.ANT-Task для FlexUnit для проекта AIR Mobile в Jenkins
Я пытаюсь интегрировать проект в работу CI на jenkins. У меня есть ANT скрипт делает следующее:
- Компиляции
- Упаковки для Android
- Упаковки для прошивки
- Создания ASDoc
То, что я хочу сейчас, чтобы написать ANT- Задача для запуска моих модульных тестов и создания отчета в формате XML или HTML, который впоследствии может быть проанализирован Дженкинсом.
Я пробовал следующее: - Последовал учебник по http://tutorials.digitalprimates.net/flexunit/Unit-16.html и получил пример для работы. Однако это Flash-проект, а не AIR-Project! - Прочитайте документацию по адресу https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Ant+Task, загрузите и построите код FlexUnit от [email protected]: flexunit/flexunit.git, чтобы получить FlexUnit4AIRCIListener.swc - Прочтите много информации в Интернете со всего места, не найдя ответ (я нашел некоторые намеки, но много информации являются устаревшими или ссылками мертвых ссылок)
то, что я до сих пор является следующим:
<taskdef resource="flexUnitTasks.tasks" classpath="${basedir}\libs\flexUnitTasks-4.1.0.jar" />
<target name="test" >
<echo>Testing...</echo>
<echo>==========</echo>
<!-- 1. Compile FlexUnit-Application -->
<mxmlc file="${PROJECT.src}\FlexUnit.mxml" output="FlexUnit.swf" >
<load-config filename="D:\tools\sdk\flex\4.11.0_AIR4.0\frameworks\air-config.xml" append="true" />
<source-path path-element="${PROJECT.src}" />
<source-path path-element="${basedir}\test" />
<library-path dir="${PROJECT.libs}" append="true">
<include name="**/*.swc" />
<include name="**/*.ane" />
</library-path>
<library-path dir="D:\tools\sdk\flex\4.11.0_AIR4.0\frameworks\libs\air" append="true">
<include name="airglobal.swc" />
</library-path>
<compiler.verbose-stacktraces>true</compiler.verbose-stacktraces>
<compiler.headless-server>true</compiler.headless-server>
</mxmlc>
<!-- 2. Run the compiled SWF -->
<flexunit swf="FlexUnit.swf"
player="air"
timeout="180000"
toDir="${OUTPUT.root}\flexUnit"
haltonfailure="false"
verbose="true"
localTrusted="true"
/>
<!-- 3. Generate readable JUnit-style reports -->
<junitreport todir="${OUTPUT.root}\flexUnit">
<fileset dir="${OUTPUT.root}\flexUnit">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${OUTPUT.root}\flexUnit\html" />
</junitreport>
</target>
Вот соответствующие части моего FlexUnit .mxml-Применение:
protected function onCreationComplete(event:FlexEvent):void
{
core = new FlexUnitCore();
core.addListener(new AirCIListener());
core.run(currentRunTestSuite());
}
public function currentRunTestSuite():Array
{
var testsToRun:Array = new Array();
testsToRun.push(test.suites.CLXSatelliteTestSuite);
return testsToRun;
}
Шаг 1. из работы ANT-Task (по крайней мере, я получаю FlexUnit.swf). Однако, Запуск SWF в <flexunit>
-Task не удается:
VerifyError: Error #1014: Class flash.filesystem::File could not be found.
Консольный вывод: [FlexUnit] Генерация значений по умолчанию ... [FlexUnit] Использование по умолчанию рабочий реж [D: \ Рабочие области \ сгибать \ Projects \ clx-satellite] [flexunit] Использование следующих параметров для тестового прогона: [flexunit] FLEX_HOME: [D: \ tools \ sdk \ flex \ 4.11.0_AIR4.0] [flexunit] haltonfailure: [false] [ flexunit] headless: [false] [flexunit] дисплей: [99] [flexunit] localTrusted: [true] [flexunit] плеер: [flash] [flexunit] port: [1024] [flexunit] swf: [D: \ workspaces \ flex \ projects \ clx-satellite \ FlexUnit.swf] [flexunit] timeout: [180000ms] [flexunit] toDir: [D : \ workspaces \ flex \ projects \ clx-satellite \ deploy \ flexUnit] [flexunit] Настройка процесса сервера ... [flexunit] Начальный сервер ... [flexunit] Открытие гнезда сервера на порту [1024]. [FlexUnit] Ожидание подключения клиента ... [FlexUnit] OS: [Windows] [FlexUnit] Запуск игрок: [FlexUnit] Выполнение 'rundll32' с аргументами: [FlexUnit] Url.dll, FileProtocolHandler ' [flexunit] 'D: \ workspaces \ flex \ projects \ clx-satellite \ FlexUnit.swf ' [flexunit] Символы вокруг исполняемого файла и аргументы: [flexunit] не является частью команды. [flexunit] Клиент подключен. [flexunit] Установка размера входящего буфера на [262144] байта. [flexunit] Получение данных ... [flexunit] Отправка подтверждения игроку для начала отправки тестовых данных ... [flexunit] [flexunit] Остановка сервера ... [flexunit] Окончание данных теста достигнуто, отправка подтверждения игрок ...
BUILD FAILED
D:\workspaces\flex\projects\clx-satellite\build.xml:148:
java.util.concurrent.ExecutionException: could not close client/server socket
Когда я включаю один тест, который не использует File
-класса, тесты работают, и я получаю подобную ошибку (ReferenceError: Error #1065: Variable flash.desktop::NativeApplication is not defined.
), но по крайней мере тесты пробегают, и я получаю XML -вывод. Мне кажется, что FlexUnit на самом деле не совместим с AIR, хотя я использую player=air
в задаче.
У кого-нибудь из вас есть рабочий пример запуска модульных тестов с помощью FlexUnit для приложения AIR (возможно, мобильного приложения) через ANT?
Этот ответ может быть полезен другим пользователям, но ссылка сейчас не работает. Хотелось бы, чтобы вы объяснили здесь ответ на SO – duggulous