ฉันจะทดสอบเว็บไซต์ฟอร์มเว็บไซต์ได้อย่างไร สำหรับฉันแล้วดูเหมือนว่ามันมากขึ้นอยู่กับสถานะและการป้อนข้อมูลของผู้ใช้มันจะไม่เป็นไปได้
หากไม่เป็นไปได้มีทางเลือกอัตโนมัติที่ถูกต้องหรือไม่
ฉันจะทดสอบเว็บไซต์ฟอร์มเว็บไซต์ได้อย่างไร สำหรับฉันแล้วดูเหมือนว่ามันมากขึ้นอยู่กับสถานะและการป้อนข้อมูลของผู้ใช้มันจะไม่เป็นไปได้
หากไม่เป็นไปได้มีทางเลือกอัตโนมัติที่ถูกต้องหรือไม่
คำตอบ:
ใช่คุณสามารถ. คุณเพียงแค่ต้องระมัดระวังในการแยกข้อกังวลออกจากกัน ในระยะสั้นคุณจะต้องลบตรรกะทั้งหมดของคุณออกจาก behind รหัสและใส่ลงในชั้นเรียนอื่น ๆ
มีสองวิธีทั่วไปในการทำเช่นนี้
วิธีง่าย ๆ คือการพิจารณาตัวจัดการเหตุการณ์ทั้งหมดของคุณใหม่อีกครั้งว่า "ระบบให้ข้อมูลอะไรบ้างให้ฉันฉันต้องเติมข้อมูลอะไรลงในหน้า" และจากนั้นให้บริการระดับซึ่งจะแปลงที่
ในกรณีนี้เลเยอร์บริการควรรู้เพียงเล็กน้อยเกี่ยวกับลักษณะของเลเยอร์การนำเสนอของคุณ คุณยังต้องใช้ข้อมูลที่ส่งคืนจากบริการและเติมส่วนประกอบที่ถูกต้องของ WebForm ในโค้ด - หลังของคุณและสิ่งนี้ยังไม่ได้ทดสอบ (อย่างน้อยโดยการทดสอบหน่วยคุณยังสามารถใช้การทดสอบการรวม) แต่นี่ไม่ค่อยเป็นสิ่งที่รหัสผิดพลาดมันมีแนวโน้มที่จะล้มเหลวในตรรกะ
ซับซ้อนมากขึ้น แต่มีประสิทธิภาพมากขึ้นวิธีคือการใช้รูปแบบการดูรุ่นพรีเซนเตอร์ เมื่อเราลองสิ่งนั้นเราพบว่าผู้นำเสนอกลายมาเป็นคู่กับกรอบอย่างรวดเร็วและยิ่งเราพัฒนา MVP ยิ่งชัดเจนยิ่งขึ้นว่า MVP ต้องการเป็น MVC แต่ไม่สามารถทำได้
ที่กล่าวว่าคนอื่นทำสิ่งนี้สำเร็จเป็นอย่างดี - มีแม้แต่เฟรมเวิร์คเว็บ SMVเพื่อกำจัดการยกที่หนัก - ดังนั้นระยะของคุณอาจแตกต่างกันไป
ค่อนข้างชัดเจนหน้าเว็บฟอร์มทั้งหมดไม่ใช่หน่วยและทำให้ไม่สามารถทดสอบหน่วยได้ อย่างไรก็ตามมีบางสิ่งที่คุณสามารถทำได้สำหรับการทดสอบอัตโนมัติ:
ฉันขอโทษที่ไม่มีส่วน "หน่วย" ของคำถาม ...
SeleniumHQเป็นเพื่อนของคุณสำหรับการทดสอบจากส่วนหน้า มันไม่ใช่การทดสอบหน่วยเหมือนการทดสอบกล่องดำ คุณยังต้องนึกถึงกรณีทดสอบที่ถูกต้อง ...
การพูดจากประสบการณ์: เฉพาะในกรณีที่มันถูกต้อง โดย "ถูกต้อง" ฉันหมายถึงการใช้โค้ดน้อยที่สุดและบางอย่างเช่น Model-View-Presenter ดังกล่าวข้างต้นเพื่อทำให้เว็บฟอร์ม "โง่" สิ่งนี้มักจะพิสูจน์ได้ว่าเป็นเรื่องยากมากกับแอปพลิเคชั่นบราวน์ฟิลด์เพราะพวกเขาไม่ได้ออกแบบมาโดยคำนึงถึงสิ่งนี้และมันเป็นความพยายามอย่างใกล้ชิดของเฮอร์คิวลินในการปรับโครงสร้าง / เขียนหน้าใหม่เพื่อใช้งาน
ฉันพบว่าการทดสอบเว็บหน่วยมีประโยชน์อย่างยิ่งแม้ว่าจะเป็นเพียงการให้แนวคิดทั่วไปเกี่ยวกับข้อบกพร่องการถดถอยหรือสำหรับโครงการใหม่
เท่าที่รัฐมีความกังวลคุณสร้างการทดสอบหน่วยของคุณตามที่คุณต้องการด้วยการทดสอบที่ไม่ใช่ UI - พวกเขาล้างฐานข้อมูลออกที่จุดเริ่มต้นของการทดสอบและสร้างฐานข้อมูลใหม่เพื่อให้มีอะไรยกเว้นสถานะเริ่มต้น การทดสอบแต่ละหน่วยนั้นจะห่อหุ้มหน้าเดียวหรือโดยทั่วไปจะเป็นงานที่แตกต่างกันในหน้า
http://watin.org/เป็นเครื่องมือทดสอบทางเว็บอีกอันหนึ่ง แต่สำหรับ C # /. NET คุณเขียนการทดสอบเป็นการทดสอบหน่วย:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
ปัจจุบันใช้ IE แต่มีการสนับสนุนการทดลองสำหรับ Firefox และ Chrome คุณสามารถทำสิ่งต่างๆโดยอัตโนมัติในการทดสอบด้วยตนเองรวมถึงการใช้จาวาสคริปต์
คุณไม่สามารถทดสอบเว็บไซต์ได้เพราะหน่วยคำขอผ่านเว็บเกิดขึ้นบนสาย (หรือผ่านสแต็ก TCP) ดังนั้นการทดสอบไม่เหมาะกับคำจำกัดความของ "การทดสอบหน่วย" พวกเขาน่าจะเป็นการทดสอบแบบครบวงจร
สำหรับการทดสอบประเภทนั้นคุณสามารถใช้ชุดโปรแกรมเช่น Selenium ซึ่งเรียกใช้เว็บเบราว์เซอร์ที่อยู่เบื้องหลัง คำเตือน: โดยปกติแล้วการทดสอบประเภทนี้จะยากและคาดเดาไม่ได้เนื่องจากมีชิ้นส่วนเคลื่อนไหวจำนวนมาก!
ที่น่าสนใจกว่านั้นคือมันทำให้ฉันกังวลเล็กน้อยว่าทำไมคุณต้องทดสอบเว็บฟอร์มเลย คุณไม่ได้วางตรรกะในโค้ดไว้มากเกินไปและมีเหตุผลทางธุรกิจเกี่ยวกับโลหิตจางโดยบังเอิญหรือไม่?
ตลอดระยะเวลา 5 ปีที่ผ่านมาจัสมีได้กลายเป็นเครื่องมือสำคัญสำหรับการทดสอบส่วนหน้า มันมักจะรวมอยู่ในการสร้างการทดสอบอัตโนมัติด้วยโหนดและ npm
ต่อhttps://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
จัสมินเป็นกรอบการทดสอบโอเพนซอร์ซสำหรับจาวาสคริปต์ [2] มันมีจุดมุ่งหมายที่จะทำงานบนแพลตฟอร์มที่เปิดใช้งาน JavaScript ใด ๆ เพื่อไม่ก้าวก่ายแอปพลิเคชันหรือ IDE และมีไวยากรณ์ที่อ่านง่าย มันได้รับอิทธิพลอย่างมากจากกรอบการทดสอบหน่วยอื่น ๆ เช่น ScrewUnit, JSSpec, JSpec และ RSpec [3]
แม้จะมีการกล่าวถึงจาวาสคริปต์ทั้งหมด แต่ก็ยังสามารถใช้สำหรับการทดสอบหน่วยของเว็บฟอร์มธรรมดา
เมื่อพัฒนาเว็บไซต์ ASP.NET เราสามารถทำการทดสอบหน่วยใน:
เป็นไปได้ที่จะ TDD ทั้งหมดนี้ขึ้นอยู่กับสถาปัตยกรรมของคุณ สิ่งเดียวที่คุณไม่สามารถทดสอบหน่วยได้คือเลย์เอาต์ของไฟล์มาร์กอัป