ฉันมีนิสัยที่พยายามแยกรหัสระดับแอปพลิเคชันจากรหัสระดับของกรอบงานเสมอดังนั้นฉันจึงพบปัญหาที่คุณอธิบายบ่อยๆ: คุณมักต้องการให้รหัสระดับของเฟรมเวิร์กทั้งหมดได้รับการทดสอบก่อนที่จะเริ่มทดสอบระดับแอปพลิเคชันใด ๆ . ยิ่งไปกว่านั้นในรหัสระดับของกรอบงานมีแนวโน้มว่าจะมีบางโมดูลเฟรมเวิร์กพื้นฐานที่ใช้โดยโมดูลเฟรมเวิร์กอื่น ๆ ทั้งหมดและหากบางสิ่งบางอย่างล้มเหลวในพื้นฐาน
โชคไม่ดีที่ผู้ส่งกรอบการทดสอบมีแนวโน้มที่จะมีความคิดที่ค่อนข้างเข้มงวดเกี่ยวกับวิธีการสร้างสรรค์ของพวกเขาที่จะนำมาใช้และจะค่อนข้างป้องกันความคิดเหล่านั้นในขณะที่คนที่ใช้กรอบการทำงานของพวกเขามีแนวโน้มที่จะยอมรับการใช้งาน นี่เป็นปัญหาเพราะยับยั้งการทดลองและนวัตกรรม ฉันไม่รู้เกี่ยวกับคนอื่น แต่ฉันอยากมีอิสระที่จะลองทำอะไรแปลก ๆ และดูด้วยตัวเองว่าผลลัพธ์จะดีขึ้นหรือแย่ลงกว่าวิธีที่กำหนดไว้แทนที่จะไม่มีอิสรภาพ ทำสิ่งต่าง ๆ ในแบบของฉันตั้งแต่แรก
ดังนั้นในความเห็นของฉันการอ้างอิงการทดสอบจะเป็นสิ่งที่ยอดเยี่ยมที่มีและแทนที่จะเป็นเช่นนั้นความสามารถในการระบุลำดับที่การทดสอบจะถูกดำเนินการจะเป็นสิ่งที่ดีที่สุดต่อไป
วิธีเดียวที่ฉันได้พบเพื่อแก้ไขปัญหาของการทดสอบการสั่งซื้อคือการตั้งชื่ออย่างระมัดระวังเพื่อใช้ประโยชน์จากแนวโน้มของกรอบการทดสอบเพื่อดำเนินการทดสอบตามลำดับตัวอักษร
ฉันไม่ทราบวิธีการทำงานใน Visual Studio เพราะฉันยังไม่ได้ทำอะไรที่เกี่ยวข้องกับการทดสอบอย่างกว้างขวางกับ C # แต่ในด้าน Java ของโลกมันทำงานดังนี้: ภายใต้โฟลเดอร์ต้นทางของโครงการเรามักจะมีสองโฟลเดอร์ย่อย หนึ่งเรียกว่า "หลัก" ที่มีรหัสการผลิตและหนึ่งที่เรียกว่า "ทดสอบ" ที่มีรหัสการทดสอบ ภายใต้ "main" เรามีลำดับชั้นของโฟลเดอร์ที่สอดคล้องกับลำดับชั้นของแพคเกจของซอร์สโค้ดของเรา แพ็คเกจ Java ประมาณคร่าวๆกับ C # namespaces C # ไม่ต้องการให้คุณจับคู่ลำดับชั้นของโฟลเดอร์กับลำดับชั้นของเนมสเปซ แต่แนะนำให้ทำเช่นนั้น
ตอนนี้สิ่งที่ผู้คนมักจะทำในโลก Java คือภายใต้โฟลเดอร์ "test" พวกเขาสะท้อนลำดับชั้นของโฟลเดอร์ที่พบภายใต้โฟลเดอร์ "main" เพื่อให้การทดสอบแต่ละครั้งอยู่ในแพ็คเกจเดียวกันกับคลาสที่ทดสอบ เหตุผลที่อยู่เบื้องหลังสิ่งนี้คือบ่อยครั้งที่คลาสการทดสอบจำเป็นต้องเข้าถึงสมาชิกแพคเกจส่วนตัวของคลาสที่อยู่ภายใต้การทดสอบดังนั้นคลาสการทดสอบจะต้องอยู่ในแพ็คเกจเดียวกันกับคลาสที่อยู่ภายใต้การทดสอบ ในด้าน C # ของโลกไม่มีสิ่งเช่นทัศนวิสัย namespace ท้องถิ่นจึงไม่มีเหตุผลที่จะสะท้อนลำดับชั้นของโฟลเดอร์ แต่ฉันคิดว่าโปรแกรมเมอร์ C # ทำตามระเบียบเดียวกันในการสร้างโฟลเดอร์ของพวกเขา
ไม่ว่าในกรณีใดฉันพบว่าความคิดทั้งหมดของการอนุญาตให้คลาสการทดสอบสามารถเข้าถึงสมาชิกแพ็กเกจโลคัลของคลาสภายใต้การทดสอบที่เข้าใจผิดเนื่องจากฉันมักจะทดสอบอินเตอร์เฟสไม่ใช่การใช้งาน ดังนั้นลำดับชั้นโฟลเดอร์ของการทดสอบของฉันไม่จำเป็นต้องทำตามลำดับชั้นของโฟลเดอร์ของรหัสการผลิตของฉัน
ดังนั้นสิ่งที่ฉันทำคือฉันตั้งชื่อโฟลเดอร์ (หมายถึงแพ็คเกจ) ของการทดสอบดังนี้
t001_SomeSubsystem
t002_SomeOtherSubsystem
t003_AndYetAnotherSubsystem
...
สิ่งนี้รับประกันว่าการทดสอบทั้งหมดสำหรับ "SomeSubsystem" จะถูกดำเนินการก่อนการทดสอบทั้งหมดสำหรับ "SomeOtherSubsystem" ซึ่งจะถูกดำเนินการทั้งหมดก่อนการทดสอบทั้งหมดสำหรับ "AndYetAnotherSubsystem" และอื่น ๆ
ภายในโฟลเดอร์ไฟล์ทดสอบแต่ละไฟล์จะมีชื่อดังนี้:
T001_ThisTest.java
T002_ThatTest.java
T003_TheOtherTest.java
แน่นอนว่ามันช่วยได้อย่างมากที่ IDEs สมัยใหม่นั้นมีความสามารถในการรีแฟคเตอร์ที่มีประสิทธิภาพซึ่งช่วยให้คุณสามารถเปลี่ยนชื่อแพ็คเกจทั้งหมด (และแพ็คเกจย่อยทั้งหมดและรหัสทั้งหมดที่อ้างถึง) ได้ด้วยการคลิกและกดปุ่ม