Настройка функциональных тестов во 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 поможет вам написать гораздо лучшие модульные тесты, так как вы можете смоделировать все зависимости синхронно или асинхронно.