เมื่อทรัพย์สินที่ถูกกำหนดไว้ในฐานข้อมูลการผลิต (หรือโคลนสำหรับการทดสอบ) นี้ไม่ได้เป็นหน่วยทดสอบ การทดสอบหน่วยตรวจสอบหน่วยงานและไม่ต้องใช้สถานะภายนอกโดยเฉพาะในการทำงาน สมมติว่าOffer1
มีการกำหนดไว้ในฐานข้อมูลว่าเป็นข้อเสนอสำหรับผู้ชายเท่านั้น นั่นคือสถานะภายนอก ดังนั้นนี่คือการทดสอบการรวมมากขึ้นโดยเฉพาะระบบหรือการทดสอบการยอมรับ โปรดทราบว่าการทดสอบการยอมรับมักไม่ได้ถูกเขียนสคริปต์ (ไม่ได้ทำงานในกรอบการทดสอบ แต่ดำเนินการโดยมนุษย์ด้วยตนเอง)
เมื่อคุณสมบัติถูกกำหนดในรูปแบบโดเมนที่มีif
คำสั่งการทดสอบเดียวกันเป็นการทดสอบหน่วย และมันอาจจะเปราะ แต่ปัญหาที่แท้จริงคือรหัสนั้นเปราะ ตามกฎทั่วไปรหัสของคุณจะมีความยืดหยุ่นมากขึ้นถ้าพฤติกรรมทางธุรกิจสามารถกำหนดค่าได้แทนที่จะเป็นรหัสฮาร์ด เนื่องจากการปรับใช้แบบเร่งด่วนเพื่อแก้ไขข้อผิดพลาดการเข้ารหัสขนาดเล็กควรเป็นของหายาก แต่ความต้องการทางธุรกิจที่เปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบล่วงหน้าเป็นเพียงวันอังคาร (สิ่งที่เกิดขึ้นทุกสัปดาห์)
คุณอาจใช้กรอบการทดสอบหน่วยเพื่อรันการทดสอบ แต่กรอบการทดสอบหน่วยไม่ จำกัด เฉพาะการรันการทดสอบหน่วย พวกเขาสามารถและรันการทดสอบการรวมได้เช่นกัน
หากคุณกำลังเขียนการทดสอบหน่วยคุณจะสร้างทั้งสองperson
และoffer1
จากพื้นดินขึ้นโดยไม่ต้องพึ่งพาสถานะฐานข้อมูล สิ่งที่ต้องการ
[Fact]
public void ReturnsFalseWhenGivenAPersonWithAGenderOfFemale()
{
var personId = Guid.NewGuid();
var gender = "F";
var person = new Person(personId, gender);
var id = Guid.NewGuid();
var offer1 = new Offer1(id, "ReturnsFalseWhenGivenAPersonWithAGenderOfFemale");
offer1.markLimitedToGender("M");
Assert.False(offer1.IsEligible(person));
}
โปรดทราบว่าสิ่งนี้จะไม่เปลี่ยนแปลงตามตรรกะทางธุรกิจ มันไม่ยืนยันว่าจะoffer1
ปฏิเสธผู้หญิง มันกำลังทำoffer1
ข้อเสนอประเภทที่ปฏิเสธผู้หญิง
คุณอาจสร้างและกำหนดค่าฐานข้อมูลเป็นส่วนหนึ่งของการทดสอบ ใน C # โดยใช้ NUnit หรือใน JUnit ของ Java คุณต้องตั้งค่าฐานข้อมูลในSetup
เมธอด สมมุติว่ากรอบการทดสอบของคุณมีความคิดคล้ายกัน ในวิธีการนั้นคุณสามารถแทรกบันทึกลงในฐานข้อมูลด้วย SQL
ถ้ามันยากสำหรับคุณที่จะเขียนโค้ดที่ใช้แทนฐานข้อมูลทดสอบสำหรับฐานข้อมูลการผลิตนั่นฟังดูเหมือนจุดอ่อนในการทดสอบในแอปพลิเคชันของคุณ สำหรับการทดสอบมันจะดีกว่าถ้าใช้บางอย่างเช่นการฉีดแบบพึ่งพาที่ยอมให้มีการทดแทน จากนั้นคุณสามารถเขียนการทดสอบที่เป็นอิสระจากกฎเกณฑ์ทางธุรกิจในปัจจุบัน
ข้อดีข้างเคียงของสิ่งนี้ก็คือมันมักจะง่ายกว่าสำหรับเจ้าของธุรกิจ (ไม่จำเป็นต้องเป็นเจ้าขององค์กรเช่นเดียวกับผู้รับผิดชอบผลิตภัณฑ์นี้ในลำดับชั้นขององค์กร) เพื่อกำหนดค่ากฎทางธุรกิจโดยตรง เพราะถ้าคุณมีกรอบทางเทคนิคประเภทนี้มันเป็นเรื่องง่ายที่จะอนุญาตให้เจ้าของธุรกิจใช้ส่วนต่อประสานผู้ใช้ (UI) เพื่อกำหนดค่าข้อเสนอ เจ้าของธุรกิจจะเลือกข้อ จำกัด ใน UI และมันจะออกmarkLimitedToGender("M")
สาย จากนั้นเมื่อข้อเสนอยังคงอยู่กับฐานข้อมูลก็จะเก็บสิ่งนี้ แต่คุณไม่จำเป็นต้องจัดเก็บข้อเสนอพิเศษเพื่อใช้งาน ดังนั้นการทดสอบของคุณสามารถสร้างและกำหนดค่าข้อเสนอที่ไม่มีอยู่ในฐานข้อมูล
ในระบบของคุณตามที่อธิบายไว้เจ้าของธุรกิจจะต้องส่งคำขอไปยังกลุ่มทางเทคนิคซึ่งจะออก SQL ที่เหมาะสมและอัปเดตการทดสอบ หรือกลุ่มเทคนิคต้องแก้ไขรหัสและการทดสอบของคุณ (หรือการทดสอบแล้วรหัส) นั่นเป็นวิธีที่ค่อนข้างหนา คุณสามารถทำมันได้. แต่ซอฟต์แวร์ของคุณ (ไม่ใช่แค่การทดสอบของคุณ) จะเปราะน้อยกว่าถ้าคุณไม่ต้องทำเช่นนั้น
TL; DR : คุณสามารถเขียนแบบทดสอบนี้ได้ แต่คุณอาจจะดีกว่าที่จะเขียนซอฟต์แวร์ของคุณเพื่อที่คุณจะได้ไม่ต้องทำเช่นนั้น