ผลต่างระหว่างรุ่นของ "Afgu/unit testing 2"
ไปยังการนำทาง
ไปยังการค้นหา
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 12 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 1: | แถว 1: | ||
: ''หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด [[afgu|Agile from the ground up]] | : ''หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด [[afgu|Agile from the ground up]] | ||
+ | == เนื้อหา == | ||
ใช้ของเก่าหากินหน่อยครับ เอกสารมาจาก[[01219343-55]] | ใช้ของเก่าหากินหน่อยครับ เอกสารมาจาก[[01219343-55]] | ||
− | + | * การหา test cases / test examples | |
− | * [http://theory.cpe.ku.ac.th/wiki/images/01219343-03-test-case-interview1.pdf Examples] | + | ** [http://theory.cpe.ku.ac.th/wiki/images/01219343-03-test-case-interview1.pdf Examples] |
− | * [http://theory.cpe.ku.ac.th/wiki/images/01219343- | + | * Slides: [http://www.cpe.ku.ac.th/~jtf/219343/03/unit-testcases.pdf Good unit tests] |
+ | * Testing dependent units: stubs, mocks, spies | ||
+ | ** Slides: [http://theory.cpe.ku.ac.th/wiki/images/01219343-04-isolation.pdf Testing units with dependencies] | ||
+ | ** Links: | ||
+ | *** [http://martinfowler.com/articles/mocksArentStubs.html Mocks aren't stubs] by [http://martinfowler.com/ Martin Fowler] | ||
+ | *** [http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html Mocks, Fakes, Stubs and Dummies] -- terminologies of various test doubles. | ||
− | == | + | == แบบฝึกหัด == |
− | * | + | === หา examples === |
− | + | ||
− | + | * แบ่งกลุ่ม ใช้ script ที่แจกให้ห้อง (ต้นฉบับจะมาแปะที่นี่ต่อไป) | |
− | + | ** [http://theory.cpe.ku.ac.th/wiki/images/01219343-InterviewScriptsforTDD1.pdf Interview scripts] | |
− | + | ||
+ | === Isolation === | ||
+ | |||
+ | '''ตัวอย่าง 1:''' สมมติว่าเราต้องการจะเขียนฟังก์ชัน | ||
+ | |||
+ | <syntaxhighlight lang="javascript"> | ||
+ | function popularSpell(words) { | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ที่นำอาร์เรย์ของสตริง <tt>words</tt> ไปค้นใน Google แล้วนับจำนวน แล้วคืนคำที่มีจำนวนผลลัพธ์การค้นมากที่สุด | ||
+ | |||
+ | โค้ดของฟังก์ชันดังกล่าวอาจจะมีขั้นตอนประมาณดังด้านล่าง | ||
+ | |||
+ | <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 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 ในการทดลองเขียน