반응형
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 는 아래 절차에 따라 진행한다.

  1. Test Case 클래스를 만든다.
  2. 비즈니스 클래스를 만든다.
  3. Test Suite 를 만들어 Test Case를 등록한다.
  4. mxml 파일에 Test Suite 를 생성하여 실행한다.
  5. 이후 진행은 일반 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" ) );

이제 디버그 모드로 실행하면 아래와 같은 성공적인 화면을 볼 수 있다... 짜~잔~~

반응형
Posted by seungkyua@gmail.com
,