API 101 PART 3 jUnit to test API…


ความเดิมตอนที่แล้ว…

src. https://i.ytimg.com/vi/2nWI8wZM-U0/maxresdefault.jpg

คำเตือน!
Part นี้อาจมีคำไม่สุภาพค่อนข้างมาก แต่ทั้งนี้ทั้งนั้นเพื่อเพิ่มอัภรสในการอ่านแบบบุคคลที่ 1 เท่านั้น โปรดใช้วิจารณญาณให้มากกว่า part อื่นๆนะครับ


เรื่องราวนั้นมีอยู่ว่า…


เอาหล่ะ PART นี้จะมาพูดถึงเรื่องการทำ Unit Test กันซึ่งหลายคนอาจจะบอกว่า Test ทำ x่า ไรวะ ซึ่งเอาจริงๆผมก็มองว่าการ Test ก็สำคัญนะ #มองบน (รู้สึกเข้าตัวเองแหะที่ก่อนหน้านี้ไม่เคยจะ Test T_T)
OK ย้อนกลับไปตอนทำ Workshop ที่มีชื่อว่า Software testing เมื่อตอนก่อนเปิดเทอม… ที่ว่ามันจะมีทั้ง business requirement, Integration test, Unit Test , Test Case, Use Case บลาๆๆๆๆๆ อะไรก็ไม่รู้เต็มไปหมด ( #ช่วงบ่น จริงๆแอบรู้สึกผิดนิดๆนะเนี่ยว่าตอนนั้นไม่เข้าใจคำว่า Unit Test, Integration Test, Test Case, Use Case แล้วไม่ยอมถามพี่เค้า ด้วยความที่ว่ากลัวเสีย self กะคนอื่น แบบเอ้าเพิ่งจบฝึกงานมาผมเห็นคนอื่นกลับมาเทพกว่าเดิมเยอะ… แล้วกลัวว่าจะแบบเห้ยมึงไปทำไรมาวะ #เอาจริงๆก็ไม่กล้าเล่ากะคนอื่นอ่ะเพราะมันไม่มีไรเลย 555+ ไม่ได้ทำไรเลยหรอน่าเบื่อหว่ะ #เอาจริงๆก็ไม่ได้ทำอะไรแบบที่เพื่อนๆกลับมาโม้เลยแหละ #เสียใจ TT เอาเป็นว่าถ้าเข้ามาอยู่ในจุดนี้แล้วก็ต้องดันเรื่อง learning curve ตัวเองให้สูงและแรงเข้าไว้เพื่อรอดในวิชานี้และโปรเจคจบด้วย เอาหล่ะ ฮึบๆ) จริงๆในครั้งนี้มันเป็นการทำแค่ Unit Test เพื่อส่งงานอ่ะแหละแต่ไหนๆก็วกเข้าไปที่เรื่องตอน Software testing แล้วงั้นก็มารู้จักกับคำเหล่านี้ตอนทำ Test ทาง technical กันเลยดีกว่า (จริงๆแอบไปอ่าน stackoverflow มาก่อนแล้วค่อยมากลั่นเป็นของตัวเอง -3-

Unit Test
มันเป็นการเทสที่เรียกได้ว่า เทสแค่จุดๆเดียวอารมณ์ว่าลองเทสสิว่า method นี้มันทำงานได้อย่างที่มันควรจะเป็นไหม สมมุติง่ายๆเลย มี method บอกว่าถ้าแกเรียกชั้น ชั้นจะให้ค่า 6 กับแกดังนั้นในตัวของ Unit Test นั้นก็เขียนบอกเลยว่าค่าที่ควรจะได้คือ 6 เป็นต้น และอีกอย่างมันเป็นหน้าที่ของคนเขียนโปรแกรมที่จะเสกมันขึ้นมาแล้วลองเทสด้วยตัวเอง

Integration Test
ก็เป็นการลองเทสเพื่อดูว่าระบบทั้งหมดนั้นทำงานสอดคล้องกันหรือเปล่า เช่นว่า เกิดอยู่ๆ API ในส่วนนั้นไม่ยอมต่อ Database ขึ้นมาก็จะได้รู้ ซึ่งก็เป็นหน้าที่ของโปรแกรมเมอร์ที่จะต้องเสกมันขึ้นมา แล้วลองมันเพื่อให้คนอื่นดู ซึ่งแน่นอนทุกอย่างจะต้องจำลองให้เหมือนสภาพจริงใน Production ให้มากที่สุด

Ref.
https://stackoverflow.com/questions/5357601/whats-the-difference-between-unit-tests-and-integration-tests/5357837#5357837

Use Case
เอาง่ายๆมันก็เป็นแค่การบอกว่า User ทำอะไรกับระบบ เช่น User login เข้าระบบ, กดเลือกเพื่อดูรายละเอียด เป็นต้น

Test Case
เป็น output ของ Use Case ซึ่งมันจะเกิดมาจาก Use Case + Action ก็จะได้ Test Case ออกมา ซึ่งถ้าเอาง่ายๆก็เช่น User Login เข้าระบบด้วยการกรอก Username และ Password ที่ถูกต้องของเขาเองลงไปแล้วกด submit และเขาก็จะเข้าสู่ระบบสำเร็จ ในกรณีนี้ Use Case คือ User Login เข้าระบบแต่ไม่ได้บอกนี่ว่าเข้าได้หรือเปล่า Action คือกรอก Username และ Password ที่ถูกต้องของเขาเองลงไปแล้วกด submit และสุดท้ายคือ Test Case คือ User login สำเร็จ

แต่ในครั้งนี้ยังอยู่ที่ unit test อยู่ซึ่งก็เขียน test ส่งอ่าแหละ 555555+ มาดูเลยว่าทำอะไรไปและบาปแค่ไหน…


My Basic unit test

import java.util.ArrayList;
import org.h2.engine.User;
import org.junit.Assert;
import org.junit.Test;
import th.ac.kmutt.sit.MyFirstService.controller.UserController;
public class MyFirstUnitTest {

@Test
public void getAllUser() {
UserController controller = new UserController();
ArrayList userResult = new ArrayList();
userResult = controller.getUsers();
Assert.assertEquals("We can get 5 user from class and put in into test's array.", 5, userResult.size());
}

@Test
public void getUser() {
UserController controller = new UserController();
Assert.assertEquals("Get user id 1 from controller", 1, controller.getUserId1().getId());
Assert.assertEquals("Get user id 1's name from controller", "Phornlert", controller.getUserId1().getName());
}
}

ซึ่งอันนี้นั้นเป็นการเทสแบบง่ายๆที่ได้ลองทำขึ้นมาดู อันแรกนั้นคือการบอกว่าลอง get user ออกมาหน่อยดูว่ามี 5 คนไหมตามที่ใน controller ควรจะ return มา ส่วนอันที่ 2 คือลอง get แค่ user id 1 ออกมาดูว่าได้ไหม ซึ่งเป็นแค่การ test method ว่าทำงานได้ไหมจริงๆถ้าเป็นโปรเจคที่จริงจังกว่านี้ unit test ผมว่าน่าจะใหญ่กว่านี้อีกเยอะ~ เดี๋ยวติดตามว่าจะเกิดอะไรขึ้นไหมในภายภาคหน้า ก็ประมาณนี้ในการลองทำ unit test ง่อยๆของผมใน part นี้ ก็ 3 PART และกับเรื่อง API เดี๋ยวครั้งหน้าเราจะมาพูดถึงเรื่องของ Micro Service กันบ้างส่วน PART นี้จบแยกย้าย!

ปล.เดี๋ยวไว้หาเวลามาพูดถึงเรื่อง Code Coverage เด้อ…

    Phornlert Lochalernrat

    Written by

    Infrastructure of Alchemist

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade