03 พฤษภาคม 2558

[Android Code] การทำ Unit Test บน Eclipse ADT



        เนื่องจากเจ้าของบล็อกได้รับมอบหมายให้ลองศึกษาการทำ Unit Test ดู ดังนั้นก็เลยทำบทความเผื่อสำหรับ Eclipse ADT ด้วยซะเลย

        สำหรับบน Eclipse ADT จะมีรูปแบบการสร้าง Unit Test แตกต่างไปจาก Android Studio อยู่พอสมควร โดยมีขั้นตอนดังนี้

เตรียมโปรเจคที่จะทำ Unit Test ไว้ให้พร้อม

        เจ้าของบล็อกยกตัวอย่างเป็นโปรเจคเปล่าๆที่ชื่อว่า MyApp โดยมีคลาสที่สร้างขึ้นมาเพื่อทดสอบการทำ Unit Test โดยเฉพาะที่ชื่อว่า FullName.java เป็นคลาสตัวอย่างที่เจ้าของบล็อกใช้กับใน Android Studio ด้วยเช่นกัน


FullName.java
package com.akexorcist.myapp;

public class FullName {
    private String firstName;
    private String surname;

    public FullName(String firstName, String surname) {
        this.firstName = firstName;
        this.surname = surname;
    }

    public String getFullName() {
        return firstName + " " + surname;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getSurname() {
        return surname;
    }
}

สร้าง Unit Test Project

        ให้เลือกไปที่ File > New > Other...



        จากนั้นให้เลือกไปที่ Android > Android Test Project แล้วกดปุ่ม Next



        ทำการตั้งชื่อโปรเจคสำหรับ Unit Test ให้เรียบร้อย โดยแนะนำให้ตั้งชื่อเดียวกับโปรเจคหลักแต่ให้ลงท้ายด้วย Test เพื่อให้จำได้ง่ายและหาเจอได้ไม่ยากนัก แล้วกดปุ่ม Next



        ที่หน้าถัดมาให้เลือกโปรเจคที่ต้องการทำ Unit Test เมื่อเลือกแล้วก็กดปุ่ม Finish



        จะได้โปรเจคสำหรับทำ Unit Test ดังนี้


        ทำการสร้างไฟล์ Java ขึ้นมา เพื่อเขียน Unit Test โดยคลิกขวาที่ Package ของโปรเจคแล้วเลือก New > Class



        สร้างไฟล์ Java ใดๆก็ได้ขึ้นมาขอแค่ลงท้ายว่า Test เป็นพอ



        โดยคลาสที่สร้างขึ้นมานั้นให้ Extends ด้วยคลาส InstrumentationTestCase อีกที

MyClassTest.java
package com.akexorcist.myapp.test;

import android.test.InstrumentationTestCase;

import com.akexorcist.myapp.FullName;

public class MyClassTest extends InstrumentationTestCase {
    
}

        จากนั้นก็ใส่โค๊ดสำหรับ Unit Test เข้าไปซะ โดยเจ้าของบล็อกจะจงใจใส่โค๊ดให้เกิด Error เข้าไปด้วย เพื่อให้มั่นใจว่า Unit Test นั้นทำงานจริงๆ (เพราะมันจะเด้ง Error บอก)

        สำหรับฟังก์ชันที่สร้างขึ้นมาสำหรับทำ Unit Test สามารถตั้งชื่ออะไรก็ได้ โดยมีข้อแม้ว่าจะต้องนำหน้าด้วยคำว่า test เสมอ ไม่เช่นนั้นตอนที่ทำงาน โปรแกรมจะไม่เรียกฟังก์ชันดังกล่าวเพื่อทำ Unit Test

MyClassTest.java
package com.akexorcist.myapp.test;

import android.test.InstrumentationTestCase;

import com.akexorcist.myapp.FullName;

public class MyClassTest extends InstrumentationTestCase {

    public void testFullName() {
        FullName fullName = new FullName("Ake", "Exorcist");
        assertEquals(fullName.getFirstName(), "Ake");
        assertEquals(fullName.getSurname(), "Exorcist");
        assertEquals(fullName.getFullName(), "Ake Exorcist");

        // Force Error
        assertEquals(fullName.getFullName(), "Sleeping For Less");
    }
    
}

        ถึงแม้ว่าจะเป็นคนละโปรเจคกับโปรเจคหลัก แต่โปรเจคตัวนี้ก็สามารถเรียกใช้งานคลาสต่างๆที่มีอยู่ในโปรเจคหลักเพื่อ Test ได้ปกติ


ทำการ Run Test

        เริ่มทำ Unit Test ได้โดยคลิกขวาที่โปรเจค Test แล้วเลือกไปที่ Run As > Android JUnit Test



        เลือกอุปกรณ์ที่ต้องการทำ Unit Test จะเป็น Real Device หรือ Emulator ก็ได้


        จากนั้นรอซักพักก็เป็นอันเสร็จการทำ Unit Test แล้วจะมีหน้าต่างแสดงขึ้นมาบอกผลลัพธ์จากการเทส แต่เนื่องจากตัวอย่างคำสั่งที่เจ้าของบล็อกใช้นั้นทำให้เกิด Error ขึ้น ก็จะมีหน้าต่าง JUnit แสดงขึ้นมาดังภาพ



        ดังนั้นเจ้าของบล็อกจึงเปิดไฟล์ MyClassTest อีกครั้ง แล้วเอาโค๊ดที่จงใจทำให้ Error ออกซะ เพื่อให้ถูกต้องตามที่ควรจะเป็น

MyClassTest.java
package com.akexorcist.myapp.test;

import android.test.InstrumentationTestCase;

import com.akexorcist.myapp.FullName;

public class MyClassTest extends InstrumentationTestCase {

    public void testFullName() {
        FullName fullName = new FullName("Ake", "Exorcist");
        assertEquals(fullName.getFirstName(), "Ake");
        assertEquals(fullName.getSurname(), "Exorcist");
        assertEquals(fullName.getFullName(), "Ake Exorcist");
    }
    
}


        เมื่อลองกด Run Test ใหม่ก็จะเห็นว่า Unit Test ผ่านฉลุยเรียบร้อย



สำหรับผู้ที่หลงเข้ามาอ่านคนใดต้องการโปรเจคตัวอย่างในบทความนี้สามารถดาวน์โหลดกันได้ที่

        • Google Drive
        • Sleeping For Less

        และผู้ที่หลงเข้ามาอ่านที่สนใจรายละเอียดการทำ Unit Test ก็ลองค้นหาข้อมูลเพิ่มเติมดูเองนะครับ แต่ถ้าจะให้เจ้าของบล็อกแนะนำก็คงจะเป็น www.somkiat.cc ของพี่ปุ๋ยครับ เพราะเจ้าของบล็อกชอบติดตามอ่านอยู่บ่อยๆ ถึงจะไม่ได้สอนพื้นฐาน แต่มีเนื้อหาที่ดีมากๆสำหรับการทำ Test ครับ



บทความที่เกี่ยวข้อง

        • ลองทำ Unit Test แบบง่ายที่สุดบน Android Studio
        • การทำ Unit Test บน Eclipse ADT




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium