ผลต่างระหว่างรุ่นของ "Afgu/unit testing 2"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 15 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 1: แถว 1:
 
: ''หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด [[afgu|Agile from the ground up]]
 
: ''หน้านีเป็นส่วนหนึ่งของชุดแบบฝึกหัด [[afgu|Agile from the ground up]]
  
== การหา test cases / test examples ==
+
== เนื้อหา ==
 +
ใช้ของเก่าหากินหน่อยครับ เอกสารมาจาก[[01219343-55]]
  
== isolation: stubs, mocks, spies ==
+
* การหา test cases / test examples
 +
** [http://theory.cpe.ku.ac.th/wiki/images/01219343-03-test-case-interview1.pdf Examples]
 +
* 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

แบบฝึกหัด

หา 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 ในการทดลองเขียน