[ANDROID] อยากเห็น Developer ไทย เขียน Test ได้ - พี่ปุ๋ย somkiat.cc


          จากการได้ติดตามเหล่า Developer Idol มาซักพักหนึ่ง ก็พบว่าหลายๆ ท่านได้แนะนำให้เขียนบล๊อกดู  ... หลังจากผัดวันประกันพรุ่งมาหลายครั้งหลายคราและแล้วตอนนี้ก็ถึงเวลาอันสมควรแล้วที่จะได้เริ่มเขียนบล๊อกซักที
          โดยโพสต์แรก เปิดซิง เลือดสาด ที่จะเขียนวันนี้ เกิดจากจุดเจ็บปวด(Pain Point) ที่ว่าผมได้มีโอกาสไปร่วมงาน Google I/O 2015 Rewind Bangkok และมี Session หนึ่งที่พี่ปุ๋ย somkiat.cc ได้มาแนะนำเกี่ยวกับการทำ Test บน Android พร้อมแสดง workshop ให้ดูแบบเบาๆ ตอนที่นั่งดูก็พอตามทันอยู่นะว่ามันทำอย่างงั้น อย่างงี้
แต่ .... หลังจากกลับมาถึงห้องจะลองทำดูเท่านั้นแหละ ทำอะไรมันก็ติดไปหมด ไม่เห็น ฟิ้วๆ ปิ้วๆ วืปๆ ตูมกลายเป็นโกโก้ครั้นเหมือนที่พี่เค้าทำเลยหว่า
ซึ่งหลังจากลองพยายามอยู่ซักพักใหญ่ๆ ก็เกิดยูเรก้าขึ้นมาว่าไหนๆ เราก็ลองทำแล้วเขียนเป็นบล๊อกเก็บไว้ดีกว่า ไม่มีคนอ่านก็เอาไว้เตือนความจำตัวเองก็ยังดี เลยเกิดเป็นโพสต์นี้ขึ้นมา

          เกริ่นมาตั้งนานมาเข้าเนื้อหากันเลยดีกว่านะครับ โดยเนื้อหาในโพสต์นี้ผมไม่ได้จะมาสอนเพื่อนๆ ทำ Test หรือเขียน Test บน Android นะครับ เพราะผมก็ยังศึกษาเกี่ยวกับเรื่องนี้อยู่เหมือนกัน :)
A : อ่าว!! แล้วอ่านมาตั้งนาน ตกลงเอ็งจะเขียนอะไรกันแน่ ?
P : แหะๆ จริงๆ วันนี้จะมาบอก ขั้นตอนการ run Unit Test บน Android Studio ด้วย JUnit ครับโผม

มาเริ่มกันเลย

ต้องเป็น Android Studio version 1.2 ขึ้นไปนะครับ
1. สร้าง Android Project ขึ้นมาก่อน โดยของผมจะตั้งชื่อโปรเจคว่า UnitTest นะครับ (ขั้นตอนนี้คงทำเป็นกันทุกคนเนาะ)
2. สร้าง Folder สำหรับไฟล์ต่างๆ ของ Test ดังนี้
  • คลิกขวาที่ src
  • เลือก new > Directory
  • ตั้งชื่อ Directory ว่า "test" นะครับ

3. สร้าง Java folder ในไว้ข้างใน folder "test" ที่สร้างไว้ในข้อที่ 2 ดังนี้
  • คลิกขวาที่ test
  • เลือก new > Directory
  • ตั้งชื่อ Directory ว่า "java" นะครับ

4. เลือก Build Variants เป็น Unit Tests


note : เลือก Unit Test เสร็จ gradle จะทำงานซักแปป จะสังเกตุเห็นว่า java folder ใน test ของเราจะกลายเป็นสีเขียวนะครับ ถ้าถึงตรงนี้แล้วเป็นสีเขียวถือว่ามาถูกทางละครับ

5. ต่อไปก็พระเอกของงาน JUnit ก่อนอื่นต้องไป add dependencies ใน app > build.gradle ดังนี้
dependencies {
    ...
    testCompile 'junit:junit:4.12'
}

6. ลงมือเขียนโค้ดกันดีกว่า ซึ่งใน session พี่ปุ๋ยได้ยกตัวอย่างโปรแกรมตัดเกรด เราก็เดินตามรอยผู้ใหญ่หมาไม่กัดครับ อย่ารีรอสร้าง Class ชื่อว่า Calculate ขึ้นมาเลยตามรูป

ซึ่งพี่ปุ๋ยก็ใจดีโยนโค้ดไว้ใน github ให้แล้ว เราก็ไม่รอช้า copy & paste สิครับ ตูม!!
public class Calculate {

    public String convertToGrade(int score) {
        if (score >= 80)
            return "A";
        if (score >= 70)
            return "B";
        return "C";

    }
}

7. A : โค้ดก็มีแล้ว จะ Test ยังไงหละ ?
    P : ก็ต้องเขียน Test สิครับ
    A : แล้วไปเขียนใส่ที่ไหนยังไง ?
    P : ยังจำ folder test > java ที่เราสร้างไว้ในข้อ 3 ได้ไหมเอ่ย สร้าง test ไว้ที่นั่นแหละ
         แต่เดี๋ยวก่อน!!! Android Studio มีฟังก์ชันเทพที่จะช่วยให้ท่านสร้าง test ได้ง่ายเลยแหละซาร่า
    A : ทำยังไงหรอจอร์จ ?
    P : เพียงแค่ท่านโทรเข้ามาภายในหนึ่งนาที เอ้ย!! เพียงแค่ท่านเลื่อน Cursor ไปที่ชื่อ class ของท่าน แล้วกด "Alt + Enter" จะปรากฏเมนูขึ้นมา ก็ให้เลือก Create Test เท่านั้นเองซาร่า


***อย่าลืมเลือก JUnit4 ด้วยนะซาร่า

พระเจ้าช่วยกล้วยทอด CalculateTest มาแล้วซาร่า

8. ขั้นตอนสุดท้ายแต่ยังไม่ท้ายสุด คือ การเขียน Test Case ซึ่งผมก็ใช้สูตรเดิม copy & paste จากโค้ดพี่ปุ๋ยมานั้นเอง ตูม!!
public class CalculateTest {
    Calculate calculate = new Calculate();

    @Test
    public void gradeA() throws Exception {
        String expectedGrade = calculate.convertToGrade(80);
        assertEquals("A", expectedGrade);
    }


    @Test
    public void gradeB() throws Exception {
        String expectedGrade = calculate.convertToGrade(70);
        assertEquals("B", expectedGrade);
    }

    @Test
    public void gradeC() throws Exception {
        String expectedGrade = calculate.convertToGrade(60);
        assertEquals("C", expectedGrade);
    }
}

9. สุดท้ายจริงๆ แล้วหละครับ เริ่มง่วงนอนแล้ว :) มา Run Test กันเถอะ
  • คลิกขวาที่ ไฟล์ test ในที่นี้ คือ CalculateTest
  • เลือก Run > CalculateTest (ให้เลือกอันที่ 2 นะครับ เพราะเราจะให้ Run ด้วย JUnit)


ตูม!!! กลายเป็นโกโก้ครั้น ผ่าน!! ผ่าน!! ผ่าน!!!


*** หมายเหตุ : จะเห็นว่าด้านบนเป็นแค่เพียงวิธีการใช้เครื่องมือเท่านั้นนะครับ ซึ่งในส่วนของการเขียน Test ส่วนตัวผมเองยังไม่มีความรู้ที่จะมาแชร์เท่าไรครับ ซึ่งถ้าหากพี่ๆ เพื่อนๆ ท่านใดสามารถแชร์กันได้ ก็ยินดีเป็นอย่างยิ่งนะครับ
*** แนะนำ หากเพื่อนๆ พี่ๆ ท่านไดสนใจเรื่องการเขียน Test สามารถเข้าไปติดตามในบล๊อกของพี่ปุ๋ย somkiat.cc ได้เลยนะครับ อัดแน่นไปด้วยเนื้อหาและสาระ ... แล้วก็อย่าลืมเอามาแชร์กันนะครับ :)
เพิ่มเติม 23/06/2015 : พี่ปุ๋ยได้โพสบทความเรื่อง Effective Unit Test สำหรับ Android application เกี่ยวกับ Local unit test และ Instrumented unit test อยากรู้ว่ามันคืออะไร ก็ต้องตามไปดูกันในลิงค์เลยนะครัช

สุดท้ายนี้หากมีข้อผิดพลาดประการใด ก็ขออภัยมา ณ ที่นี้ด้วย
และหวังว่าบทความนี้จะมีประโยชน์กับทุกๆ ท่านนะครับ
ขอบคุณครับ

ลิงค์อ้างอิง

พี่ปุ๋ย somkiat.cc : สรุปสิ่งที่แบ่งปันในงาน I/O Rewind Bangkok 2015
พี่ปุ๋ย somkiat.cc : Effective Unit Test สำหรับ Android application

Teeranai P

Developer ตัวน้อยๆ ที่หลงใหลในโลกของการพัฒนา Software. รักการเขียนโปรแกรมเป็นอันดับ 2 รองลงมาจากการนอน