Flash Builder 4.5 и FlexUnit 4.1
У нас есть большой многомодульный продукт, который мы пишем на Flex 4.1, работающий поверх среднего уровня на основе Java.
Исходя из фона Java, я хочу иметь поддержку в нашей среде Flex для написания и запуска модульных тестов.
Я обновил Flash Builder 4.5 выпуском FlexUnit версии 4.1, и я могу успешно писать и выполнять модульные тесты в проекте приложения, но я не понял, как заставить модульные тесты работать с проектами модулей или библиотек в Flash Builder.
Проблемы с библиотечными проектами
Поскольку нам нужны тесты, скомпилированные для приложения (SWF), мне нужно либо создать сопутствующий проект в Flash Builder, либо изменить тип связи для зависимостей проекта библиотеки (SWC), чтобы избежать внешних, так как внешние зависимости должны быть доступны для кто-то еще (обычно приложение верхнего уровня).
В качестве эксперимента я попытался изменить связь с примером проекта библиотеки: SWF тестового бегуна был успешно сгенерирован, но FlexUnit не смог его запустить, так как сообщалось об ошибке #1065 для чего-то, что не имело для меня никакого смысла.
Для нашей сборки без головы (с использованием Gradle) я обнаружил, что это легко решить, просто объединяя все зависимости, независимо от их первоначальной связи, при создании SWF тестового бегуна. Я также могу легко запустить это из Eclipse, используя поддержку внешних инструментов, так как результаты - это совместимые с JUnit результаты XML, которые отображаются в обычном представлении JUnit.
Как ты делаешь это?
Как другие разработчики Flex структурируют свои модульные тесты в многомодульном и мультибиблиотечном проекте? Вы запускаете тесты из Flash Builder 4.5? Можете ли вы запустить тесты независимо для любого проекта библиотеки или модуля?
1 ответ
Хорошо, это второй раз, когда я отвечаю на свой вопрос (последний был также о Flex).
Я пошел на добавление тестов для каждого отдельного проекта, но я запускаю тесты из центрального проекта тестирования.
Каждый проект должен иметь:
- тестовый каталог
- приложение MLXML с соглашением об именах
<project name>Test.mxml
в тестовом каталоге - набор тестов верхнего уровня, объединяющий все тесты в проекте в каталоге тестов в обычной структуре пакета
- некоторые юнит-тесты;-)
Flash Builder не любит приложения MXML, расположенные в каком-либо другом каталоге, кроме src
поэтому важно НЕ устанавливать test
каталог как другой исходный каталог.
Теперь добавьте test
исходные каталоги от каждого проекта до общего проекта тестирования. Вам нужно будет добавить все необходимые зависимости (как во время выполнения, так и в тесте) в этот проект.
Я нахожу FlexUnit немного странным в том, как он управляет раннером для юнит-тестов. Он предложит сгенерировать приложение MXML для запуска тестов, когда в Eclipse вы выберете "запускать как -> модульные тесты Flex" (вы можете выбрать, какие тесты следует запускать). Выбор "Выполнить тесты FlexUnit" из контекстного меню не вызывает генерацию MXML.
Вы не должны проверять этот MXML-файл в системе контроля версий, но игнорируйте его. Причина в том, что FlexUnit не восстанавливает этот файл успешно, если вы хотите запустить другой набор тестов. Это означает, что вам нужно вручную удалять файл всякий раз, когда вы хотите его заново сгенерировать.
Вот пример MXML, который мы используем для тестового бегуна в проекте библиотеки:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600" creationComplete="onCreationComplete()">
<fx:Script>
<![CDATA[
import net.infonic.hs.AllTestsSuite;
import org.flexunit.listeners.CIListener;
import org.flexunit.runner.FlexUnitCore;
private var core: FlexUnitCore;
public function currentRunTestSuite(): Array {
var testsToRun:Array = new Array();
testsToRun.push(AllTestsSuite);
return testsToRun;
}
private function onCreationComplete(): void {
core = new FlexUnitCore();
core.addListener(new CIListener());
core.run(currentRunTestSuite());
}
]]>
</fx:Script>
</s:Application>