FlexUnit

เขียน Flex มาก็สองปีน่าจะเอามาใช้แต่แรก แต่สุดท้ายกว่าจะได้ลองและเอามาใช้จริงๆ ก็อาทิตย์ที่แล้ว T_T ไม่เป็นไรยังไงก็ยังได้ใช้ แต่ก่อนที่จะเอามาใช้ได้ ก็ต้องแบ่งโปรแกรมที่เขียนก่อนเลยเป็นส่วนๆ แล้วค่อยๆ เลือกว่าจะเขียน UnitTest ครอบส่วนไหนบ้าง อาทิตย์ที่แล้วก็เลือกได้ Component นึงเรียกว่าเป็น Component หลักเลยก็ว่าได้ คิดว่าคงได้ชำแหละเป็นส่วนๆ ก็อาทิตย์นี้ หลังจากที่ให้มันใหญ่โตมานาน

ตอนแรกสุดตั้งใจว่า ให้มันสร้างรายงานออกมาเป็น HTML ให้แต่ยังทำไม่สำเร็จ สุดท้ายเลยเอาแค่ให้มีหน้าสำหรับทำงานให้ดูแล้วแสดงว่าตัวไหนผ่าน ไม่ผ่าน สำหรับ FlexUnit ที่ใช้เป็นรุ่นที่ยังไม่ออก (มันเคยออกไปยังหว่า -*- ) ดาวโหลดได้ที่ Adobe Labs

มาดูโครงสร้างที่ใช้ก่อน เนื่องจากใช้ร่วมกับโปรเจคที่ทำปัจจุบัน เลยมีแฟ้ม src หรือส่วนต่างๆ อยู่แล้ว เพียงแต่ต้องการเขียนส่วนทดสอบเพิ่ม เลยสร้างแค่แฟ้ม test ขึ้นมา ตามด้านล่าง

Project
 -src
 -test
 --Runner.mxml
 --Runner.as (ถ้าใครชอบเขียน script รวมอยู่ใน mxml ก็ไม่จำเป็นต้องมีไฟล์นี้ก็ได้)
 --unit
 ---TestUnit1.as
 ---TestUnit2.as
 .....

ไฟล์ Runner.mxml



	

	
	

ไฟล์ Runner.as

import mx.logging.LogEventLevel
import org.flexunit.internals.TextListener
import org.flexunit.internals.TraceListener
import org.flexunit.listeners.UIListener
import org.flexunit.listeners.CIListener
import org.flexunit.runner.FlexUnitCore

import test.TestSortController

public function onCreationComplete():void {
  var core:FlexUnitCore = new FlexUnitCore()
  core.addListener(new UIListener(uiListener));
  //CIListener ไว้สำหรับแสดงผลลัพธ์เวลารัน Ant Script เพื่อให้ CI ต่างๆ แสดงผลลัพธ์ได้ไม่จำเป็นต้องมี(คือยังทำไม่ผ่านอ่ะ)
  core.addListener(new CIListener())
  core.addListener(new TraceListener())
  core.addListener(TextListener.getDefaultTextListener(LogEventLevel.DEBUG))

  //มีกี่ TestUnit ก็ใส่เรียงไปเรื่อยๆ
  core.run(TestUnit1, TestUnit2, TestUnit3, ....)
}

ด้านบนคือส่วนที่ไว้สำหรับรัน UnitTest ต่อไปคือตัว UnitTest หละ

ไฟล์ TestUnit1.as

package test
{
  import org.flexunit.Assert

  import controller.Unit1

  public class TestUnit1
  {

    private var unit:Unit1

    // Before ไว้สำหรับบอกว่า method นี้ให้ทำงานก่อนรัน test ทุก test
    [Before]
    public void function before():void {
      unit = new Unit1()
    }

    [Test(ticket="1")]
    public void function testFunction1():void {
      Assert.assertEquals(unit.function1(), "expect")
      Assert.assertTrue(unit.isTrue())
    }

    [Ignore("Not ready to run")]
    [Test(ticket="2")]
    public void function testFunction2():void {
	Assert.assertFail("Not implements yet.")
    }

  }
}

ยังมี Annotation อื่นๆ อีกพอสมควร(มันเรียก Annotation เหมือนจาวาป่าวหว่า =_=) แต่ใช้แค่นี้เพราะจำง่ายดี ^^! ความสามารถของ FlexUnit4 จริงๆ แล้วมีเรื่อง event ดักว่าคลิกอย่างไรด้วย แต่มันยุ่งยากมาก เลยแบ่งเป็นส่วนๆ และทดสอบเฉพาะ ที่ไม่เกี่ยวกับ UI อยู่ อาทิตย์ถัดไป นอกจากจะแยกชิ้นส่วน คิดว่าจะพยายามลองให้มันแสดงผลลัพธ์ที่ Shell/Command line อีกครั้ง เพราะให้ compile แล้วเปิดเว็บเพื่อดูผลลัพธ์มันหลายขั้นตอนไปหน่อย

About llun

Just a programmer

,