เขียน 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 แล้วเปิดเว็บเพื่อดูผลลัพธ์มันหลายขั้นตอนไปหน่อย