วิธีการทดสอบหน่วยที่เรียกใช้เว็บเซอร์ซัพพลายเออร์


10

ฉันมีชั้นเรียนที่มีวิธีการสาธารณะหนึ่งวิธีSend()และวิธีส่วนตัวสองสามวิธี มันเรียกสองเว็บเซอร์และประมวลผล reponse การประมวลผลจะทำในวิธีการส่วนตัว

ฉันต้องการหน่วยทดสอบรหัส ความเข้าใจของฉันคือการทดสอบหน่วยควรทดสอบรหัสของฉันแยก (เช่นจำลองคำตอบของซัพพลายเออร์)

ฉันยังเชื่อว่าวิธีการส่วนตัวไม่ควรต้องผ่านการทดสอบหน่วยแต่ถ้าฉันเพิ่งทดสอบเมธอด Send () โค้ดของฉันไม่ได้รับการทดสอบแยกและขึ้นอยู่กับผู้จัดหา resonse

ฉันควรทำให้วิธีการส่วนตัวของฉันเป็นแบบสาธารณะหรือไม่เพื่อให้ฉันสามารถทดสอบพวกเขาด้วยคำตอบที่จำลองได้ ดูเหมือนว่าเป็นการปฏิบัติที่ไม่ถูกต้องเนื่องจากฉันมีเพียงห้องเรียนเท่านั้นที่ต้องเรียกพวกเขา

ขออภัยถ้าเป็นคำถามพื้นฐานฉันค่อนข้างใหม่สำหรับการทดสอบหน่วย

ฉันใช้ c # และ VS2010


หากคุณไม่ทดสอบวิธีส่วนตัวคุณจะทราบได้อย่างไรว่าทำงานได้ดี
ไบรอัน Oakley

1
@BryanOakley คุณไม่จำเป็นต้องรู้ว่าวิธีการทำงานแบบส่วนตัวมันเป็นแบบส่วนตัว คุณรู้ว่ามันทำงานได้เพราะวิธีการสาธารณะที่เรียกว่าผ่านการทดสอบของพวกเขา
StuperUser

@Bryan Oakley ดูที่ลิงค์
Tom Squires

สวัสดีทอมฉันได้อัปเดตลิงก์แล้วเพื่อให้โดดเด่นยิ่งขึ้นและให้ข้อความลิงก์แสดงถึงเป้าหมาย โปรดย้อนกลับ
StuperUser

คำตอบ:


18

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

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


3

ฉันคิดว่าการทดสอบที่มีการอ้างอิง (การโทร webservices ของซัพพลายเออร์ ) เป็นการทดสอบการรวมระบบมากกว่าการทดสอบหน่วย


3

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

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

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

สำหรับการโพสต์ที่ดีในกรอบการเยาะเย้ย C # อื่นให้ดูเธรด SO ต่อไปนี้:

/programming/37359/what-c-mocking-framework-to-use

แก้ไข: สำหรับความละเอียดอ่อนมากเกินไปฉันจะเป็นเจ้าของว่าฉันไม่ได้พูดถึง DbUnit หรือเครื่องมือการทำธุรกรรมอื่น ๆ ที่สามารถย้อนกลับการเปลี่ยนแปลงฐานข้อมูลในตอนท้ายของการทดสอบ สิ่งเหล่านี้สามารถทำซ้ำได้และเป็นสภาพแวดล้อมที่ไม่เชื่อเรื่องพระเจ้ากับข้อมูลทดสอบที่สร้างขึ้นดังนั้น Mocking Framework จึงไม่จำเป็นในกรณีนี้


บางคนสามารถอธิบาย downvote ได้บ้าง? ฉันไม่ได้ริปบน PHP, ROR, ฐานข้อมูล NoSQL, Javascript บนเซิร์ฟเวอร์, ผลิตภัณฑ์ Apple หรือเทรนด์
แฟชั่น

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