Как загрузить библиотеки RSL во время модульных тестов с помощью flexunit с использованием gradlefx?

Я перевожу наши гибкие приложения на сборку с Gradle. Пока что дела идут хорошо, кроме юнит-тестирования.

корень build.gradle

description='Parent project for flex applications'

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        classpath group: 'org.gradlefx', name: 'gradlefx', version: '0.6'
    }
}

allprojects {
    group='com.mycompany.flex'
    version='0.0.1-SNAPSHOT'

    repositories {
        mavenCentral()
        mavenLocal()
    }
}

subprojects {
    apply plugin: 'gradlefx'

    dependencies {
        flexSDK group: 'org.apache', name: 'apache-flex-sdk', version: '4.1.0A', ext: 'zip' 

        //unit test libraries
        test group: 'org.hamcrest', name: 'hamcrest-as3-flex', version: '1.1.3', ext: 'swc'

        test group: 'org.flexunit', name: 'flexunit-tasks', version: '4.1.0-8', ext: 'jar'
        test group: 'org.flexunit', name: 'flexunit-flex', version: '4.1.0-8', ext: 'swc'
        test group: 'org.flexunit', name: 'flexunit-cilistener', version: '4.1.0-8', ext: 'swc'     
    }


    flexUnit { 
        command="C:/Windows/System32/Macromed/Flash/flashplayer_11_sa_debug.exe"
    }
}

проблемный проект build.gradle

description='module_MyModule'
type = 'swf'

dependencies {
    rsl project(':library_common')

    external group: 'flexlib', name: 'flexlib', version: '2.5', ext: 'swc'

    merged group: 'com.esri.ags', name: 'agslib', version: '2.5-2011-11-30', ext: 'swc'
    merged group: 'org.robotlegs', name: 'robotlegs-framework', version: '1.5.2', ext: 'swc'
    merged group: 'org.alivepdf', name: 'alivepdf', version: '0.1.5RCfeb2010', ext: 'swc'
}

Компиляция работает без проблем, gradle test приводит к следующему выводу:

:module_MyModule:test
[ant:flexunit] Compiling test classes: [com.mycompany.MyModelTest]
[ant:null] Loading configuration file C:\Users\PGreen\.gradle\gradleFx\sdks\56bb8970d35ada5a72c3596118157aa694a7e83e\frameworks\flex-config.xml
:module_MyModule:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':module_MyModule:test'.
> Compilation failed:
C:\development\flexworkspaces\gradle\module_MyModule\src\main\actionscript\com\mycompany\MyModel.as(11): col: 22 Error: The definition of base class BaseModel was not found.

      public class MyModel extends BaseModel
                                   ^


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 14.006 secs

Базовый класс BaseModel определяется в проекте ':library_common'. Если я изменю конфигурацию с rsl в mergedвсе работает нормально. Таким образом, проблема, похоже, связана с тем, что флэш-плеер не знает, где искать ': library_common', когда он пытается загрузить его во время выполнения. Как мне это указать? В своем поиске я обнаружил похожие проблемы с maven с помощью плагина flexmojos, но в целом решений нет.

1 ответ

Решение

На данный момент компиляция приложения модульного тестирования делегируется задаче ANT, поставляемой с FlexUnit (я предполагаю, что модульное тестирование с FlexMojos работает аналогичным образом). К сожалению, именно эта задача не очень хорошо справляется с несколькими ситуациями.

У нас есть другие проблемы, которые имеют ту же основную причину; например, "Невозможно сохранить метаданные при выполнении тестов FlexUnit".
У нас есть решение в процессе, но оно требует от нас переписать test задача, так что GradleFx компилирует тестовое приложение и передает полученный SWF-файл во FlexUnit вместо того, чтобы FlexUnit выполнял компиляцию. Как вы уже догадались, это не будет исправлено в одночасье.

Пока же я могу предложить вам только одно предложение, которое я не проверял: возможно, можно было бы включить ваш RSL в test сфера на вершине rsl область, добавив это в ваш скрипт сборки:

test project(':library_common')
Другие вопросы по тегам