반응형
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 는 아래 절차에 따라 진행한다.
2. 비즈니스 클래스 만들기.
3. Test Suite 만들기
Test Suite 은 두가지 방식으로 만들 수 있다.
첫번째 방식은 초기 버전 방식 그대로 suite() 메소드를 static 으로 만들어 제공하는 것이다.
또 다른 방법은 클래스의 변수로 선언하는 것이다.
4. mxml 파일 만들기
Flex 프로젝트를 만들면 디폴트로 FlexUnitSample.mxml 파일이 생성되어 있을 것이다.
이를 아래와 같이 수정한다.
runMe() 메소드를 보면 FlexUnitCore 클래스를 생성해서 UI 리스너를 등록한 후 Suite 를 돌리는 것을 알 수 있다.
리스너는 UI 리스너와 Text 리스너가 있어 둘중에 하나 편하게 사용하면 된다.
Text 리스너를 사용하고 싶다면 아래와 같이 등록하면 된다.
Suite 는 3번에서 만든 두가지를 다 등록할 수 있다.
앞에서는 변수 방식의 Suite 를 표현했으니 이번에는 suite() 메소드로 만든 Suite 를 등록해 보자.
Suite 대신 Test Case 클래스를 직접 등록하여 사용할 수 도 있다.
혹은, Test Case 클래스의 특정 메소드만 사용할 수 도 있다.
이제 디버그 모드로 실행하면 아래와 같은 성공적인 화면을 볼 수 있다... 짜~잔~~
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);
}
}
}
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;
}
}
}
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;
}
}
}
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;
}
}
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>
<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" ) );
이제 디버그 모드로 실행하면 아래와 같은 성공적인 화면을 볼 수 있다... 짜~잔~~
반응형