Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

เพื่อความสนุกมาเขียน Unit testingในภาษา R กัน

$
0
0

หลังจากที่เขียนภาษา R มาสักพัก สิ่งที่น่าสนใจ และ ตั้งคำถามไว้คือ ถ้าอยากเขียน Unit test ในภาษา R มันมี xUnit framework อะไรให้ใช้หรือไม่ ? เมื่อไปค้นหาก็เจอเยอะเลย เช่น
  • RUnit ทำการ update ล่าสุดในปี 2015
  • svUnit ทำการ update ล่าสุดในปี 2014
  • testthat ทำการ update ล่าสุดในปี 2016
ดูจากการ update แล้วมาลองใช้งาน testthat กันหน่อยดีกว่า

เริ่มด้วยการ configuration และโครงสร้าง project ก่อนเลย

  • เก็บ production code ไว้ใน folder src
  • เก็บ test code ไว้ใน folder tests
จากนั้นทำการสร้างไฟล์หลักสำหรับการทดสอบ ชื่อว่าไฟล์ run-test.R เพื่อบอกว่าใช้ library ชื่อว่า testthat สำหรับการทดสอบ เพื่อบอกว่าจะทดสอบไฟล์อะไรบ้าง เพื่อบอกว่าชุดการทดสอบอยู่ที่ไหน ดังนี้ [gist id="0f88d05e1d4799dd8db2d263d5d15bf8" file="run-test.R"] ทำการทดสอบด้วยคำสั่ง [code] $Rscript run-test.R [/code] แน่นอนว่าต้องเจอ error โดย error แรกก็คือไม่เจอไฟล์ fizzbuzz.R ใน folder src ดังนั้นทำการสร้างไฟล์ก่อน [gist id="0f88d05e1d4799dd8db2d263d5d15bf8" file="error01.txt"] จากนั้นทำการ run ด้วยคำสั่งเดิมจะเจอ error ต่อมา คือ ไม่พบไฟล์ test ใน folder tests เลย [gist id="0f88d05e1d4799dd8db2d263d5d15bf8" file="error02.txt"] ซึ่งรูปแบบของชื่อไฟล์เป็นไปตาม regular expression ดังนี้ "^test.*\\.[rR]$" นั่นคือชื่อไฟล์ขึ้นต้นด้วย test. และมีนามสกุล r หรือ R ก็ได้ ยกตัวอย่างเช่น test.fizzbuzz.R หลังจากสร้างไฟล์ทุกอย่างเรียบร้อยทำการ run คำสั่งเดิม จะแสดงผลดังนี้ ถือว่าพร้อมสำหรับการเขียน unit test แล้ว [code] DONE ================= [/code]

เมื่อทุกอย่างพร้อมก็เริ่มเขียน test กันเถอะครับ

ซึ่งเขียนตามรูปแบบของ testthat ดังนี้ [gist id="0f88d05e1d4799dd8db2d263d5d15bf8" file="test.fizzbuzz.R"] คำอธิบาย
  • context ใช้อธิบายกลุ่มการทดสอบ
  • test_that ทำการกำหนดชื่อการทดสอบ โครงสร้างคล้าย jasmine มาก ๆ
จากนั้นทำการ run การทดสอบได้ผลดังนี้ [gist id="0f88d05e1d4799dd8db2d263d5d15bf8" file="test-error.txt"] จะเห็นได้ว่า error message แจ้งข้อผิดพลาดต่าง ๆ มาหมดเลย เช่นชื่อ function say() นั้นหาไม่เจอนะ

เมื่อ test fail แล้วก็ได้เวลาเขียน production code นะสิ

ก็เขียน code ง่าย ๆ เพื่อทำให้ชุดการทดสอบผ่านดังนี้ [gist id="0f88d05e1d4799dd8db2d263d5d15bf8" file="fizzbuzz.R"] ผลการทำงานผ่านสิ [code] TDD with R language: . DONE ================== [/code] สังเกตุไหมว่ามีจุด (.) จำนวน 1 จุดนะ นั่นคือจำนวนของชุดการทดสอบนั่นเอง
เพียงเท่านี้ก็สามารถเริ่มเขียน Unit testing สำหรับภาษา R ได้แล้วครับ
ปล. ทำไปเพื่ออะไร ? ตอบง่าย ๆ คือ อยากทำเท่านั้นเองนะ Source code ตัวอย่างอยู่ที่ Github::Up1::TDD with R

Viewing all articles
Browse latest Browse all 1997

Trending Articles