ฉันอาจให้ประสบการณ์ของเราแก่คุณเมื่อเราเริ่มดูการทดสอบหน่วยกระบวนการระดับกลางของเราที่มีการดำเนินงาน "ตรรกะทางธุรกิจ" ของ sql
ก่อนอื่นเราสร้างเลเยอร์นามธรรมที่อนุญาตให้เรา "เชื่อมต่อใน" การเชื่อมต่อฐานข้อมูลใด ๆ ที่สมเหตุสมผล (ในกรณีของเราเราเพียงรองรับการเชื่อมต่อ ODBC ประเภทเดียว)
เมื่ออยู่ในสถานที่เราก็สามารถทำสิ่งนี้ในรหัสของเรา (เราทำงานใน C ++ แต่ฉันแน่ใจว่าคุณได้รับความคิด):
GetDatabase (). ExecuteSQL ("INSERT INTO foo (blah, blah)")
ในเวลาทำงานปกติ GetDatabase () จะคืนค่าออบเจ็กต์ที่เลี้ยง sql ของเรา (รวมถึงการสืบค้น) ผ่าน ODBC ไปยังฐานข้อมูลโดยตรง
จากนั้นเราเริ่มดูฐานข้อมูลในหน่วยความจำ - วิธีที่ดีที่สุดคือ SQLite ( http://www.sqlite.org/index.html ) มันง่ายอย่างน่าทึ่งในการตั้งค่าและใช้งานและอนุญาตให้เรา subclass และ override GetDatabase () เพื่อส่งต่อ sql ไปยังฐานข้อมูลในหน่วยความจำที่สร้างและทำลายสำหรับการทดสอบทุกครั้งที่ดำเนินการ
เรายังอยู่ในช่วงเริ่มต้นของเรื่องนี้ แต่มันก็ดูดี แต่เราต้องทำให้แน่ใจว่าเราสร้างตารางใด ๆ ที่จำเป็นและเติมด้วยข้อมูลทดสอบ - แต่เราได้ลดภาระงานที่นี่ด้วยการสร้าง ชุดฟังก์ชันผู้ช่วยทั่วไปที่สามารถทำสิ่งเหล่านี้ได้มากมายสำหรับเรา
โดยรวมแล้วมันช่วยอย่างมากกับกระบวนการ TDD ของเราเนื่องจากการเปลี่ยนแปลงสิ่งที่ดูเหมือนเป็นการเปลี่ยนแปลงที่ไร้เดียงสาเพื่อแก้ไขข้อบกพร่องบางอย่างอาจมีผลกระทบค่อนข้างแปลกในพื้นที่อื่น ๆ (ยากต่อการตรวจจับ) ของระบบของคุณ - เนื่องจากธรรมชาติของ sql / ฐานข้อมูล
เห็นได้ชัดว่าประสบการณ์ของเรามีศูนย์กลางที่สภาพแวดล้อมการพัฒนา C ++ อย่างไรก็ตามฉันแน่ใจว่าคุณอาจได้รับสิ่งที่คล้ายกันภายใต้ PHP / Python
หวังว่านี่จะช่วยได้