Flex 단위테스트는 FlexUnit 을 사용한다.
FlexUnit은 버전 4 가 현재 진행중이며 아래의 사이트에서 다운 받을 수 있다.
FlexUnit4 beta 2.0 다운받기 <- 요기를 클릭
FlexUnit4 사용법을 위해서 Adobe Flex Development Tool 인 Flex Builder 3 를 설치하여 Flex Sample 프로젝트를 만든다. (프로젝트명 : FlexUnitSample)
FlexUnit4 의 압축을 풀어 lib 디렉토리에 있는 FlexUnit1Lib.swc, FlexUnit4.swc, FlexUnit4UIRunner.swc 파일을 복사하여 Sample 프로젝트의 lib 디렉토리에 복사한다.
Unit Test 는 아래 절차에 따라 진행한다.
- Test Case 클래스를 만든다.
- 비즈니스 클래스를 만든다.
- Test Suite 를 만들어 Test Case를 등록한다.
- mxml 파일에 Test Suite 를 생성하여 실행한다.
- 이후 진행은 일반 TDD 방법과 동일하다.
1. Test Case 클래스 만들기..
package simple {
import flexunit.framework.TestCase;
public class BankAccountTest extends TestCase {
public function testDeposit():void {
var bankAccount:BankAccount = new BankAccount();
bankAccount.deposit(100);
assertTrue("100원을 입금하면 100원이 저축된다", bankAccount.getBalance() == 100);
bankAccount.deposit(25);
assertEquals("25원을 추가로 입금하면 125원 이다", 125, bankAccount.getBalance());
}
public function testWithdraw():void {
var bankAccount:BankAccount = new BankAccount();
bankAccount.deposit(100);
bankAccount.withdraw(25);
assertTrue("백원을 저축하고 25원을 찾으면 남은 돈은 75원 이다",
bankAccount.getBalance() == 75);
}
}
}
2. 비즈니스 클래스 만들기.
package simple {
public class BankAccount {
private var balance:Number = 0;
public function deposit(amount:Number):void {
balance = balance + amount;
}
public function withdraw(amount:Number):void {
balance = balance - amount;
}
public function getBalance():Number{
return balance;
}
}
}
3. Test Suite 만들기
Test Suite 은 두가지 방식으로 만들 수 있다.
첫번째 방식은 초기 버전 방식 그대로 suite() 메소드를 static 으로 만들어 제공하는 것이다.
package simple {
import flexunit.framework.TestSuite;
public class AllFrameworkTests {
public static function suite() : TestSuite {
var testSuite:TestSuite = new TestSuite();
testSuite.addTestSuite( BankAccountTest );
return testSuite;
}
}
}
또 다른 방법은 클래스의 변수로 선언하는 것이다.
package simple {
import simple.BankAccountTest;
[Suite]
[RunWith("org.flexunit.runners.Suite")]
public class FlexUnit4Suite {
public var testDeposit:BankAccountTest;
public var testWithdraw:BankAccountTest;
}
}
4. mxml 파일 만들기
Flex 프로젝트를 만들면 디폴트로 FlexUnitSample.mxml 파일이 생성되어 있을 것이다.
이를 아래와 같이 수정한다.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml"
creationComplete="runMe()" xmlns:flexUnitUIRunner="
http://www.adobe.com/2009/flexUnitUIRunner"
styleName="flexUnitApplication" >
<mx:Script>
<![CDATA[
import simple.BankAccountTest;
import simple.FlexUnit4Suite;
import simple.AllFrameworkTests;
import mx.logging.LogEventLevel;
import org.flexunit.internals.TextListener;
import org.flexunit.listeners.UIListener;
import org.flexunit.runner.Request;
import org.flexunit.runner.FlexUnitCore;
private var core:FlexUnitCore;
public function runMe():void {
core = new FlexUnitCore();
core.addListener( new UIListener( uiListener ));
core.run( FlexUnit4Suite );
}
]]>
</mx:Script>
<mx:Style>
Application {
backgroundColor: #3872b2;
backgroundGradientColors: #3872b2, #0c1a3d;
backgroundGradientAlphas: 1, 1;
themeColor: #ffffff;
color: #444444;
fontFamily: "Myriad Pro Semibold";
fontSize: 12;
}
</mx:Style>
<flexUnitUIRunner:TestRunnerBase id="uiListener" width="100%" height="100%" />
</mx:Application>
runMe() 메소드를 보면 FlexUnitCore 클래스를 생성해서 UI 리스너를 등록한 후 Suite 를 돌리는 것을 알 수 있다.
리스너는 UI 리스너와 Text 리스너가 있어 둘중에 하나 편하게 사용하면 된다.
Text 리스너를 사용하고 싶다면 아래와 같이 등록하면 된다.
core.addListener( TextListener.getDefaultTextListener( LogEventLevel.DEBUG ) );
Suite 는 3번에서 만든 두가지를 다 등록할 수 있다.
앞에서는 변수 방식의 Suite 를 표현했으니 이번에는 suite() 메소드로 만든 Suite 를 등록해 보자.
core.run( AllFrameworkTests );
Suite 대신 Test Case 클래스를 직접 등록하여 사용할 수 도 있다.
core.run( BankAccountTest );
혹은, Test Case 클래스의 특정 메소드만 사용할 수 도 있다.
core.run( Request.method( BankAccountTest, "testDeposit" ) );
이제 디버그 모드로 실행하면 아래와 같은 성공적인 화면을 볼 수 있다... 짜~잔~~