Настройка функциональных испытаний в Flex
-
01-10-2019 - |
Вопрос
Я устанавливаю функциональный тестовый набор для приложения, который загружает внешний файл конфигурации. Прямо сейчас я использую функцию Addasync Flexunit, чтобы загрузить ее, а затем снова тестировать, если содержимое указывает на услуги, которые существуют и могут быть доступны.
Беда с этим заключается в том, что имеющие этот вид двух (или более) этапов означает, что я управляю всеми моими тестами в контексте одного теста с десятками утверждений, что похоже на своего рода вырожденный способ использовать рамки и делает ошибки труднее найти. Есть ли способ иметь что-то вроде асинхронной установки? Есть ли еще одна структура тестирования, которая обрабатывает это лучше?
Решение
Предполагая, что вы используете 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
Похоже, вам нужно удалить зависимость загрузки на внешний файл. В значительной степени все айнхронные испытания могут быть удалены благодаря использованию Макияные рамки. Asmock это потрясающий выбор для Flex. Это позволит вам подделать объект Urloader и вернуть фальшивые конфигурации, чтобы запустить ваши тесты. Перемагивание поможет вам писать гораздо лучшие тесты на единицу, как вы можете издеваться над всеми зависимостями синхронными или асинхронными.