Настройка функциональных тестов во Flex

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

Проблема в том, что наличие такого (или более) двухэтапного метода означает, что я запускаю все свои тесты в контексте одного теста с десятками утверждений, что выглядит как некий вырожденный способ использования фреймворка и затрудняет поиск ошибок. Есть ли способ иметь что-то вроде асинхронной установки? Есть ли другая среда тестирования, которая справляется с этим лучше?

3 ответа

Решение

Предполагая, что вы используете FlexUnit 4, addAsync можно вызвать из метода [BeforeClass]:

public class TestFixture
{
    [BeforeClass]
    public static function fixtureSetup() : void
    {
        // This static method will be called once for all the tests
        // You can also use addAsync in here if your setup is asynchronous
        // Any shared state should be stored in static members
    }

    [Test]
    public function particular_value_is_configured() : void
    {
        // Shared state can be accessed from any test
        Assert.assertEquals(staticMember.particularValue, "value");
    }
}

При этом тестирование кода, обращающегося к файлу, действительно является интеграционным тестом. Я также вряд ли в состоянии спорить с использованием ASMock:)

Это довольно легко, но мне потребовалось 2 дня, чтобы понять это. Решение:

Сначала вам нужно создать статическую переменную где-нибудь.

 public static var stage:Stage

Существует FlexUnitApplication.as, созданный каркасом flexunit, и с помощью функции onCreationComplete() вы можете установить на этапе статическую ссылку, созданную ранее:

private function onCreationComplete():void
    {
        var testRunner:FlexUnitTestRunnerUIAS=new FlexUnitTestRunnerUIAS();
        testRunner.portNumber=8765; 
        this.addChild(testRunner); 
        testStageRef.stage=stage //***this is what I've added
        testRunner.runWithFlexUnit4Runner(currentRunTestSuite(), "testsuitename");
    }

и когда вы получите доступ к этапу в программе, вы должны заменить его на:

if(stage==null) stage=testStageRef.stage

Похоже, вам нужно удалить зависимость загрузки этого внешнего файла. Практически все Aysnchronous тесты могут быть удалены с помощью фальшивых фреймворков. ASMock - отличный выбор для Flex. Это позволит вам подделать объект URLoader и вернуть поддельные конфигурации для запуска ваших тестов. Mocking поможет вам написать гораздо лучшие модульные тесты, так как вы можете смоделировать все зависимости синхронно или асинхронно.

Другие вопросы по тегам