ในโครงการปัจจุบันของฉันฉันมีเวลาที่ยากลำบากในการหาวิธีแก้ปัญหาที่ดีในการสร้างการทดสอบการรวมที่ปรับขนาดได้ซึ่งไม่มีผลข้างเคียง การชี้แจงเล็ก ๆ น้อย ๆ เกี่ยวกับคุณสมบัติฟรีผลข้างเคียง: ส่วนใหญ่เกี่ยวกับฐานข้อมูล; ไม่ควรมีการเปลี่ยนแปลงใด ๆ ในฐานข้อมูลหลังจากการทดสอบเสร็จสมบูรณ์ (ควรมีการเก็บรักษาสถานะ) บางทีความสามารถในการปรับขยายและการสงวนรักษาของรัฐไม่ได้มาด้วยกัน แต่ฉันต้องการผลักดันให้เกิดทางออกที่ดีกว่า
นี่คือการทดสอบการรวมทั่วไป (การทดสอบเหล่านี้แตะเลเยอร์ฐานข้อมูล):
public class OrderTests {
List<Order> ordersToDelete = new ArrayList<Order>();
public testOrderCreation() {
Order order = new Order();
assertTrue(order.save());
orderToDelete.add(order);
}
public testOrderComparison() {
Order order = new Order();
Order order2 = new Order();
assertFalse(order.isEqual(order2);
orderToDelete.add(order);
orderToDelete.add(order2);
}
// More tests
public teardown() {
for(Order order : ordersToDelete)
order.delete();
}
}
อย่างที่บางคนอาจจินตนาการว่าวิธีการนี้ให้ผลการทดสอบที่ช้ามาก และเมื่อนำไปใช้กับการทดสอบการรวมทั้งหมดจะใช้เวลาประมาณ 5 วินาทีในการทดสอบเพียงส่วนเล็ก ๆ ของระบบ ฉันสามารถจินตนาการจำนวนนี้เพิ่มขึ้นเมื่อความคุ้มครองเพิ่มขึ้น
อะไรจะเป็นอีกวิธีหนึ่งในการเขียนการทดสอบเช่นนี้? อีกทางเลือกหนึ่งที่ฉันนึกได้คือมีตัวแปรทั่วโลก (ภายในคลาส) และวิธีทดสอบทั้งหมดใช้ตัวแปรนี้ร่วมกัน ด้วยเหตุนี้จึงมีการสร้าง & ลบคำสั่งซื้อเพียงไม่กี่คำเท่านั้น ส่งผลให้การทดสอบเร็วขึ้น อย่างไรก็ตามฉันคิดว่านี่เป็นปัญหาที่ใหญ่กว่า การทดสอบจะไม่ถูกแยกออกอีกต่อไปและทำให้ยากขึ้นที่จะเข้าใจและวิเคราะห์
อาจเป็นได้ว่าการทดสอบการรวมเข้าด้วยกันไม่ได้หมายถึงการรันบ่อยเท่าการทดสอบหน่วย ดังนั้นประสิทธิภาพต่ำอาจเป็นที่ยอมรับสำหรับสิ่งเหล่านั้น ไม่ว่าในกรณีใดมันจะเป็นการดีถ้าได้รู้ว่ามีใครบางคนที่มีทางเลือกอื่นในการปรับปรุงความยืดหยุ่น