Flash Builder 4.5 и FlexUnit 4.1 - PullRequest
       27

Flash Builder 4.5 и FlexUnit 4.1

4 голосов
/ 28 июля 2011

У нас есть большой, многомодульный продукт, который мы пишем на 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 Ответ

2 голосов
/ 15 августа 2011

ОК, это второй раз, когда я отвечаю на свой вопрос (последний был также о Flex).

Я пошел для добавления тестов в каждый отдельный проект, но я запускаю тестыиз центрального тестового проекта.

Каждый проект должен иметь:

  • тестовый каталог
  • приложение MLXML с соглашением об именах <project name>Test.mxml в тестовом каталоге
  • набор тестов верхнего уровня, объединяющий все тесты в проекте в каталоге тестов в обычной структуре пакета
  • некоторые модульные тесты; -)

Flash Builderне любит MXML-приложения, находящиеся в каком-либо другом каталоге, кроме src, поэтому важно NOT установить каталог test в качестве другого исходного каталога.

Теперь добавьте testисходные каталоги от каждого проекта до общего проекта тестирования.Вам нужно будет добавить все необходимые зависимости (как во время выполнения, так и в тестирование) в этот проект.

Я нахожу FlexUnit немного странным в том, как он управляет бегуном для модульных тестов.Он предложит сгенерировать приложение MXML для запуска тестов, когда в Eclipse вы выберете «Выполнить как -> Flex Unit Tests» (вы можете выбрать, какие тесты следует запускать).Выбор «Выполнить тесты 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>
...