Возможности FlexUnit 4.x ( Часть 1 )

в 4:49, , рубрики: Action Script, Flash-платформа, модульное тестирование, метки: ,

Перевод поста описывающего возможности FlexUnit, оригинал: www.flexunit.org/?page_id=6

Для каждой функциональности указывается версия FlexUnit в которой она доступна.

Flex или ActionScript 3 (4.0)

FlexUnit доступен как для Flex так и для Action Script. Если вы тестируете Flex проект, то вы может найти соответствующие FlexUnit для той версии Flex которую вы используете. Что касается сборки FlexUnit для Action Script, то она будет работать с любым проектом Action Script 3.

Метаданные — Test (4.0)

Тесты теперь помечают используя тег метаданых с именем [Test]. Теперь для ваших тестов не нужно использовать специальные обозначения (префикс test и т.п). Кроме того потребность в определении Test и Suite классов исчезла. Ваши классы больше не должны наследовать классы фреймворка. Ниже приведены несколько примеров тестов.

[Test]
public function addition():void {
   assertEquals(12, simpleMath.add(7, 5));
}
 
[Test]
public function subtraction():void {
   assertEquals(9, simpleMath.subtract(12, 3));
}

Так как, теперь классы тестов не должны наследовать класс из FlexUnit, вы заметите, что функции проверки (assert function) которые вы использовали в прошлом (assertEquals, assertTrue), теперь реализованы как статические функции класса Assert;

Before и After (4.0)

Иногда вам нужно настроить тестовое окружение (или прибор) для ваших тестов. В приведенном выше примере, вам нужно обеспечить существование ссылки на simpleMath до запуска тестов. В предыдущих версиях FlexUnit и Fluint вы могли переопределить методы setup() и teardown() чтобы достигнуть данной цели. FlexUnit 4 включает метаданные Before и After которые решают аналогичную задачу. Любой метод помеченый тегом Before будет запущен перед каждым тестовым методом. Любой метод помесеный тегом After, будет запущен после каждого тестового метода. Это означает что вы можете иметь множество методов запускающихся перед или после теста.

[Before]
public function runBeforeEveryTest():void {
   simpleMath = new SimpleMath();
} 
 
[Before]
public function alsoRunBeforeEveryTest():void {
   simpleMath1 = new SimpleMath();
} 
 
[After]
public function runAfterEveryTest():void {
   simpleMath = null;
   simpleMath1 = null;
}

Если вы используете множество методов before или after, вы можете управлять порядком выполнения методов используя параметр order. Например [Before(order=1)], [Before(order=2)].

BeforeClass и AfterClass (4.0)

Методы отмеченные с помощью Before и After запускаются до и после запуска каждого тестового метода. BeforeClass и AfterClass позволяют определить статический метод который будет запущен до и после запуска всех тестовых методов в классе теста. Так же как для Before и After, вы можете определять порядок выполнения методов BeforeClass и AfterClass, с помощью параметра order.

[BeforeClass]
public static function runBeforeClass():void {
   //run for one time before all test cases
} 
 
[AfterClass]
public static function runAfterClass():void {
   // run for one time after all test cases
}
Обработка исключений (4.0)

Для тега метаданных Test также может быть указан параметр expects. Параметр expects позволяет обозначить, что данный тест генерирует исключение. Если тест генерирует исключение с указанным именем, то это считается успехом, ели нет то провалом. Это избавляет нас от необходимости, использовать обертку из блока try с пустым catch, при написании тестов.

[Test(expects="flash.errors.IOError")]
public function doIOError():void {
   //a test which causes an IOError 
}

Или

[Test(expects="TypeError")]
public function divisionWithException():void {
   simpleMath.divide( 11, 0 );
}
Ignore (4.0)

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

[Ignore("Not Ready to Run")]
[Test]
public function multiplication():void {
   assertEquals(15, simpleMath.multiply(3, 5));
}
Асинхронность (4.0)

В предыдущей версиях FlexUnit было очень сложно тестировать код имеющий множество асинхронных событий и который управлялся событиями, но был не полностью асинхронным.
Во Fluint поддержка асинхронности лучше, есть возможность асинхронной установки и демонтажа, но каждый выполненный тест, навешивает дополнительную функциональность на асинхронный код для обеспечения его выполнения.
FlexUnit 4 позволяет разработчику определить, какие тесты нуждаются в асинхронности используя параметр async.
Параметр async дает полную поддержку асинхронности, такую же как Fluint для аналогичного теста. В дополнение к параметру async, можно определить тайм-аут для метода.

[Before(async,timeout="250")]
public function setMeUp():void {
} 
[After(async,timeout="250")]
public function allDone():void {
} 
[Test(async,timeout="500")]
public function doSomethingAsynchronous():void {
   //Async.proceedOnEvent( testCase, target, eventName );
   //Async.failOnEvent( testCase, target, eventName );
   //Async.handleEvent( testCase, target, eventName, eventHandler );
   //Async.asyncHandler( testCase, eventHandler );
   //Async.asyncResponder( testCase, responder );
}

Автор: iliacmd

Поделиться

* - обязательные к заполнению поля