เริ่มต้นโครงการใหม่ด้วย TDD


10

ฉันกำลังศึกษา TDD และฉันอ่านว่ามันช่วยให้คุณกำหนดการออกแบบแอพได้ถูกต้องไหม?

ดังนั้นฉันจึงตัดสินใจเริ่มสร้างโครงการใหม่เพื่อช่วยให้เข้าใจได้ดีขึ้น

ฉันต้องการสร้างระบบการลงทะเบียนผู้ใช้แบบง่ายที่จะขอชื่อที่อยู่อีเมลประเทศ (จะเลือกจากรายการ) และหมายเลขโทรศัพท์

ดังนั้นคำถามคือ ...

ฉันสร้างโซลูชันใหม่ใน VS 2010 เพิ่มโครงการทดสอบใหม่และฉันไม่รู้ว่าการทดสอบใดที่จะเขียน!

เนื่องจากมันจะช่วยให้ฉันกำหนดการออกแบบได้ฉันจะเขียนแบบทดสอบอะไรได้บ้าง

ขอบคุณสำหรับความช่วยเหลือใด ๆ !

c#  .net  tdd 

1
มันจะช่วยให้คุณในทางที่คุณครั้งแรกต้องคิดเกี่ยวกับรูปแบบที่คุณกำลังจะใช้เรียนคุณจะเขียน ฯลฯ - เริ่มต้นด้วยการกำหนดชั้นเรียนและการเขียนการทดสอบกรณีสำหรับวิธีการแล้วเริ่มดำเนินการวิธีการ ตามกรณีทดสอบของพวกเขา ..
halfdan

คำตอบ:


6

เมื่อคุณเขียนการทดสอบหน่วยคุณกำลังทดสอบพฤติกรรมของแอปพลิเคชันของคุณดังนั้นคำถามสำคัญที่ต้องถามคือแอปพลิเคชันของคุณทำอะไร นี่คือจุดเริ่มต้น:

[TestFixture]
public class RegistrationTests
{
    [Test]
    public void Should_save_new_user_info()
    {
    }

    [Test]
    public void Should_throw_validation_exception_when_email_already_exists()
    {
    }

    [Test]
    public void Should_format_phone_number_when_country_code_is_us()
    {
    }
}

การทดสอบทั้งหมดนั้นผ่านไปแล้วจะทำอย่างไรต่อไป :)
Scott Whitlock

2

เพียงแค่สร้างโครงการทดสอบและการเขียนวิธีทดสอบบางอย่างเป็น TDD แต่ในประสบการณ์ของฉันมันไม่ได้ช่วยอะไรมากนอกจากคุณจะทำงานในห้องสมุดที่มี API ที่รู้จักและการเรียกใช้เมธอดนั้นสอดคล้องกับสิ่งที่ผู้ใช้คาดหวัง . คุณต้องมีรายการทดสอบที่ถูกต้องและสำหรับแอปพลิเคชั่นที่ไม่สำคัญซึ่งสามารถทำได้ยากมาก

ฉันแนะนำให้ลองใช้ SpecFlow - มันกำหนดการทดสอบแยกออกจากการติดตั้งและโครงสร้างของฟีเจอร์ไฟล์บังคับให้คุณคิดเกี่ยวกับสิ่งที่คุณกำลังทดสอบจริง ๆ

เมื่อคุณกำหนดคุณสมบัติคุณเพียงแค่เขียนสิ่งที่ชอบ

When a user is saved
Then the user should exist

เนื่องจากคุณไม่ได้อยู่ในไฟล์รหัสในตอนนี้คุณจึงไม่อยากคิดเกี่ยวกับรายละเอียดการใช้งานเช่นวิธีการที่ถูกเรียกให้สร้างผู้ใช้หรือแม้แต่ระดับที่ใช้งานคุณสามารถใช้แท็กเพื่อเลือกการใช้งานที่แตกต่างกัน ดังนั้นในระดับนี้ไม่สำคัญว่า "ผู้ใช้ถูกบันทึก" หมายถึงการโทรไปที่ CreateUser หรือเปิดเบราว์เซอร์และส่งแบบฟอร์ม

เมื่อคุณมีคุณสมบัติที่กำหนดไว้การทดสอบทั้งหมดจะถูกสร้างขึ้นและจะเริ่มผ่านเมื่อคุณใช้คำจำกัดความขั้นตอนและรหัสแอปพลิเคชันจริงที่จะทดสอบ

สำหรับแอพง่าย ๆ ที่คุณสามารถสร้างไฟล์ฟีเจอร์ได้ แต่สำหรับสิ่งที่ซับซ้อนกว่านั้นมันมีประโยชน์ที่จะรวบรวมสเป็คที่สมบูรณ์มากขึ้นไว้ล่วงหน้า ฉันใช้แอป mindmapping ของ iPad สำหรับสิ่งนี้ แต่คุณสามารถใช้เครื่องมือใดก็ได้ที่คุณพอใจที่สุด

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

คุณสมบัติย่อยเหล่านี้แต่ละรายการจะต้องมีรายการสถานการณ์จำลองที่กำหนดว่าคุณสมบัตินั้นใช้งานได้หรือไม่สิ่งต่าง ๆ เช่น "สามารถบันทึกผู้ใช้ที่ถูกต้อง" และ "ไม่สามารถบันทึกผู้ใช้ด้วยชื่อผู้ใช้ซ้ำ"

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


2

ฉันพบว่าเป็นการดีที่จะสำรองการทดสอบครั้งแรกของฉันลงใน TDD ด้วยการอ่านและการตัดโค้ด บทความวิกิพีเดียในเรื่องที่เป็นสิ่งที่ดีมากและจะนำคุณไปสู่ความหลากหลายของแหล่งข้อมูลอื่น ๆ มองหาสิ่งต่าง ๆ โดย Kent Beck โดยเฉพาะ - เป็นพ่อของ TDD

อีกสิ่งหนึ่งที่อาจช่วยให้คุณทำอะไรได้บ้างก็คือการทำคาตาส - แบบฝึกหัดการฝึกที่เรียบง่ายและไร้สติเกือบ Roy Osheroveมีบางส่วนที่ดี

นอกเหนือจากนั้นเพียงระลึกถึงแนวคิดสำคัญของ TDD - เขียนการทดสอบครั้งละหนึ่งรายการและอย่าดำเนินการจนกว่าจะผ่านการทดสอบก่อนหน้านี้ทั้งหมด เขียนโค้ดที่เพียงพอเพื่อตอบสนองการทดสอบปัจจุบันหลีกเลี่ยงสิ่งล่อใจที่จะเขียนเพิ่มเติม ในขณะที่คุณไปหยุดทุก ๆ ครั้งและคิดว่าถ้าคุณสามารถล้างรหัสหรือการทดสอบ พัฒนาด้วยสีแดง (การทดสอบที่ล้มเหลว), สีเขียว (ผ่านการทดสอบ), วงจรการรีแฟคเตอร์

และเพื่อให้คุณเริ่มต้นอาจเริ่มด้วยความต้องการชื่อของคุณ คุณต้องการอะไร

คุณอาจจะต้องเรียน เขียนแบบทดสอบ (บางคนข้ามสิ่งนี้ แต่เมื่อเริ่มทำแบบฝึกหัด) และเขียนชั้นเรียน

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

บางทีคุณอาจมีกฎเกณฑ์ทางธุรกิจเพิ่มเติม บางทีคุณอาจต้องการให้ชื่อของคุณมีความยาวอักขระขั้นต่ำ เขียนการทดสอบดูมันล้มเหลวเขียนรหัส

และอื่น ๆ ...


1

ฉันคิดว่ามันเป็นไปไม่ได้ที่จะให้แนวคิดของ TDD กับคุณในคำตอบสั้น ๆ คุณต้อง "เห็น" บางคนฝึกมันเพื่อให้ได้ความรู้สึกของมัน ทรัพยากรที่ดีที่สุดที่ฉันเคยพบเกี่ยวกับหัวข้อที่เป็นhttp://pragprog.com/titles/achbd/the-rspec-book ก่อนที่คุณจะบอกฉันว่าทับทิมไม่ใช่ภาษาของคุณ: อ่านคำนำโดยลุงบ๊อบ! ;-)


1
หนังสือ rspec ไม่เป็นไร หาก OP กำลังจะอ่านหนังสือใน TDD นี่ควรเป็น: amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530
Julio

0

คุณอาจต้องการตั้งค่าการทดสอบที่พยายามเพิ่มค่าที่แตกต่างกันหลายค่าลงในฟิลด์อีเมลบางค่าใช้งานได้และค่าอื่น ๆ อย่าหยุดพัฒนาจนกว่าการทดสอบทั้งหมดจะให้ค่าที่คาดหวัง สิ่งที่ต้องการ


0

ตามที่คุณอธิบายระบบมีการทดสอบเพียงครั้งเดียวที่ระดับแอปพลิเคชัน:

[ทดสอบ] โมฆะสาธารณะ Save_and_retrieve_user (ชื่อสตริงอีเมลสตริง ... ) {// Save // ​​Retrieve // ​​Verify}

เมื่อคุณปรับปรุงข้อกำหนดให้เพิ่มการทดสอบมากขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.