'FlexUnit'에 해당되는 글 1건

  1. 2009/09/12 FlexUnit - Flex(플렉스) 단위 테스트 프레임워크
2009/09/12 20:42

FlexUnit - Flex(플렉스) 단위 테스트 프레임워크

Flex에서 단위 테스트를 하자!

나는 모르고 있었다. Flex에도 단위 테스트를 위한 프레임워크가 있다는 것을.. 바로 FlexUnit으로 플렉스에서 단위 테스트를 할 수가 있다. 비슷한 프레임워크로 AsUnit이란 게 있는데, 아주 살짝 살펴보니 다음과 같은 차이가 있는 것 같다.

  • AsUnit
    • Flex SDK가 없어도 사용할 수 있다.
  • FlexUnit
    • 테스트 결과를 쌔끈한 UI로 보여준다.

FlashDevelop에서 FlexUnit을 사용해 예제를 하나 만들어 보았다. 참고로 FlashDevelop은 유료 소프트웨어인 Flash Builder (구 Flex Builder)를 대체할 수 있는 오픈소스 소프트웨어이다. (여기에서 최신버전을 다운로드 받을 수 있다.)

그럼 예제를 따라해보자. 잠깐! 그 전에 여기에서 FlexUnit 라이브러리를 다운로드하고 시작하자. 다운로드한 압축파일 속 bin 폴더의 'FlexUnit.swc' 파일을 사용하게 될 것이다.

 1. FlashDevelop에서 Flex 3 프로젝트를 생성한다.

메뉴에서 Project > New Project를 선택한다. 템플릿에서 Flex 3 Project를 선택하고, 프로젝트 이름, 저장 위치, 기본 패키지 이름을 채우고 프로젝트를 생성한다.

프로젝트가 생성되면 우측 프로젝트 뷰에서 src 폴더 속 방금 지정한 패키지에 'Main.mxml' 파일이 생긴 것을 볼 수 있다.

2. 해당 프로젝트에 FlexUnit 라이브러리를 추가한다.

lib 폴더에 앞에서 말했던 FlexUnit.swc 파일을 복사한다. 그리고 FlexUnit.swc 파일에서 마우스 오른쪽 클릭한 후, Add To Library를 선택하면 된다. 참 쉽죠~잉?

3. 테스트하고자 하는 ActionScript 클래스를 만든다.

net.kjunine.test.sample.Sample.as

package net.kjunine.test.sample 
{
	
	public class Sample 
	{
		
		public static function sum(values:Array):Number
		{
			var sum:Number = 0;
			
			for (var i:int = 0; i < values.length; i++) 
			{
				sum += parseInt(values[i]);
			}
			
			return sum;
		}
		
	}
	
}

Sample 클래스에 배열을 파라메터로 받아들여서 그 배열의 모든 엘리먼트들의 합을 구해서 반환하는 sum이라는 메소드를 만들어 보았다.

4. 방금 만든 ActionScript 클래스를 테스트할 TestCase 클래스를 만든다.

먼저 테스트 소스가 들어갈 test 폴더를 만들고 그 안에 폴더를 추가해 src와 같은 패키지 구조로 만들어 준다. 그리고 메뉴에서 Project > Properties를 선택해서 classpath 탭을 선택하고 방금 만든 test 폴더를 클래스패스에 추가한다. (지금처럼 소스와 테스트를 폴더로 분리하는 것이 바람직한 방법이다.)

net.kjunine.test.sample.SampleTest.as

package net.kjunine.test.sample 
{
	import flexunit.framework.TestCase;
	
	public class SampleTest extends TestCase
	{
		
		public function testSum():void
		{
			var values:Array = new Array('8', '20', '10', '7', '15');
			
			var actual:Number = Sample.sum(values);
			var expected:Number = 60;
			
			assertEquals(expected, actual);
		}
		
	}
	
}

TestCase를 상속받은 SampleTest 클래스를 만들어서 Sample.sum() 메소드를 테스트한다. TestCase 클래스는 JUnit처럼 다양한 assert 메소드들을 제공한다.

5. 테스트용 Main.mxml을 만든다.

net.kjunine.test.Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:flexui="flexunit.flexui.*" creationComplete="this.init();">
	<mx:Script>
		<![CDATA[
		import flexunit.framework.TestSuite;
		import net.kjunine.test.sample.SampleTest;
		
		private function init():void {
			var test:TestSuite = new TestSuite();
			test.addTestSuite(SampleTest);
			testRunner.test = test;
			testRunner.startTest();
		}
		]]>
	</mx:Script>
	<flexui:TestRunnerBase id="testRunner" />
</mx:Application>

TestRunnerBase와 TestSuite가 사용된다. 테스트를 더 추가하고 싶으면 다른 테스트 클래스를 TestSuite.addTestSuite() 메소드로 추가해주기만 하면 된다.

예제의 모든 내용을 만들었다. 그러면 프로젝트 구조는 위와 같을 것이다.

6. 테스트를 실행한다.

FlashDevelop에서 프로젝트를 실행하는 것은 메뉴에서 Project > Test Movie를 선택하거나 단축키 F5를 누르면 된다. 그러나 실행하기 전에 test 폴더의 Main.mxml 파일이 실행되도록 하자.

위 그림과 같이 test 폴더의 Main.mxml 파일에서 마우스 오른쪽 클릭한 후 Always Compile을 선택한다. 이렇게 하면 Test Movie를 실행했을 때 test 폴더의 Main.mxml 파일이 실행될 것이다. (만약 다시 src 폴더의 Main.mxml 파일이 실행되게 하려면 src 폴더의 Main.mxml 파일에서 같은 방법대로 하면 된다.)

이제 실행해보자. 위 그림과 같이 테스트가 성공하였는가? 그리고 UI가 정말 이쁘지 않은가? ^-^ 화면 중간에 보이는 드롭다운 박스의 옵션을 선택해서 리스트에 보일 테스트 결과를 변경할 수 있다.

방금 만든 프로젝트 파일들을 압축해서 올렸다. 참고하시라.

이제 FlexUnit로 Flex에서 단위 테스트를 할 수 있게 되었다. 그 동안 ActionScript 클래스를 테스트 해보기 위해서 trace()를 남발했었는데 이제부터는 테스트를 작성해서 테스트하면 안심할 수 있을 것이다.


저작자 표시
Trackback 0 Comment 0