ผลต่างระหว่างรุ่นของ "Afgu/unit testing 2"
ไปยังการนำทาง
ไปยังการค้นหา
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 5 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 1: | แถว 1: | ||
: ''หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด [[afgu|Agile from the ground up]] | : ''หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด [[afgu|Agile from the ground up]] | ||
+ | == เนื้อหา == | ||
ใช้ของเก่าหากินหน่อยครับ เอกสารมาจาก[[01219343-55]] | ใช้ของเก่าหากินหน่อยครับ เอกสารมาจาก[[01219343-55]] | ||
แถว 16: | แถว 17: | ||
* แบ่งกลุ่ม ใช้ script ที่แจกให้ห้อง (ต้นฉบับจะมาแปะที่นี่ต่อไป) | * แบ่งกลุ่ม ใช้ script ที่แจกให้ห้อง (ต้นฉบับจะมาแปะที่นี่ต่อไป) | ||
+ | ** [http://theory.cpe.ku.ac.th/wiki/images/01219343-InterviewScriptsforTDD1.pdf Interview scripts] | ||
=== Isolation === | === Isolation === | ||
− | สมมติว่าเราต้องการจะเขียนฟังก์ชัน | + | '''ตัวอย่าง 1:''' สมมติว่าเราต้องการจะเขียนฟังก์ชัน |
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
แถว 28: | แถว 30: | ||
ที่นำอาร์เรย์ของสตริง <tt>words</tt> ไปค้นใน Google แล้วนับจำนวน แล้วคืนคำที่มีจำนวนผลลัพธ์การค้นมากที่สุด | ที่นำอาร์เรย์ของสตริง <tt>words</tt> ไปค้นใน Google แล้วนับจำนวน แล้วคืนคำที่มีจำนวนผลลัพธ์การค้นมากที่สุด | ||
− | + | โค้ดของฟังก์ชันดังกล่าวอาจจะมีขั้นตอนประมาณดังด้านล่าง | |
− | ==== mocks/test spies ==== | + | <syntaxhighlight lang="javascript"> |
+ | function popularSpell(words) { | ||
+ | // 1. for each word w, do | ||
+ | // 2. generate google query url for w | ||
+ | // 3. make a request to google, get the result content | ||
+ | // 4. extract the number of results from the content | ||
+ | // 5. update the word with the maximum number | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | คำถามคือเราจะ test function ดังกล่าวได้อย่างไร? | ||
+ | |||
+ | ถามกลับกันคือ จากฟังก์ชันดังกล่าว มีอะไรเป็น '''อุปสรรค''' ในการ test ฟังก์ชันดังกล่าวบ้าง? | ||
+ | |||
+ | '''ตัวอย่าง 2:''' สมมติเราต้องการอ่าน links จากผู้ใช้ facebook แล้วมาประมวลผลบางอย่าง (เช่น ดูสถิติว่าผู้ใช้มีการโพสสูงสุดวันใดในสัปดาห์) | ||
+ | |||
+ | ==== แยก dependencies ==== | ||
+ | |||
+ | ==== stubs/mocks/test spies ==== | ||
− | เราจะใช้ [http://sinonjs.org/ Sinon.JS] ซึ่งเป็น '''test | + | เราจะใช้ [http://sinonjs.org/ Sinon.JS] ซึ่งเป็น '''test spie/test stub library''' ในการทดลองเขียน |
รุ่นแก้ไขปัจจุบันเมื่อ 04:56, 25 พฤศจิกายน 2556
- หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด Agile from the ground up
เนื้อหา
เนื้อหา
ใช้ของเก่าหากินหน่อยครับ เอกสารมาจาก01219343-55
- การหา test cases / test examples
- Slides: Good unit tests
- Testing dependent units: stubs, mocks, spies
- Slides: Testing units with dependencies
- Links:
- Mocks aren't stubs by Martin Fowler
- Mocks, Fakes, Stubs and Dummies -- terminologies of various test doubles.
แบบฝึกหัด
หา examples
- แบ่งกลุ่ม ใช้ script ที่แจกให้ห้อง (ต้นฉบับจะมาแปะที่นี่ต่อไป)
Isolation
ตัวอย่าง 1: สมมติว่าเราต้องการจะเขียนฟังก์ชัน
function popularSpell(words) {
}
ที่นำอาร์เรย์ของสตริง words ไปค้นใน Google แล้วนับจำนวน แล้วคืนคำที่มีจำนวนผลลัพธ์การค้นมากที่สุด
โค้ดของฟังก์ชันดังกล่าวอาจจะมีขั้นตอนประมาณดังด้านล่าง
function popularSpell(words) {
// 1. for each word w, do
// 2. generate google query url for w
// 3. make a request to google, get the result content
// 4. extract the number of results from the content
// 5. update the word with the maximum number
}
คำถามคือเราจะ test function ดังกล่าวได้อย่างไร?
ถามกลับกันคือ จากฟังก์ชันดังกล่าว มีอะไรเป็น อุปสรรค ในการ test ฟังก์ชันดังกล่าวบ้าง?
ตัวอย่าง 2: สมมติเราต้องการอ่าน links จากผู้ใช้ facebook แล้วมาประมวลผลบางอย่าง (เช่น ดูสถิติว่าผู้ใช้มีการโพสสูงสุดวันใดในสัปดาห์)
แยก dependencies
stubs/mocks/test spies
เราจะใช้ Sinon.JS ซึ่งเป็น test spie/test stub library ในการทดลองเขียน