ฉันกำลังมองหาคำตอบเดียวกันและในเวลานี้เอกสาร xUnit มีประโยชน์มากในการใช้งาน Class Fixtures และ Collection Fixtures ซึ่งทำให้นักพัฒนามีฟังก์ชั่นการตั้งค่า / การแยกย่อยที่หลากหลายในระดับคลาสหรือกลุ่มของคลาส สิ่งนี้สอดคล้องกับคำตอบจาก Geir Sagberg และให้การใช้งานโครงกระดูกที่ดีเพื่อแสดงให้เห็นว่าควรมีลักษณะอย่างไร
https://xunit.github.io/docs/shared-context.html
ควรใช้คอลเลคชันเมื่อใด: เมื่อคุณต้องการสร้างบริบทการทดสอบเดียวและแบ่งปันระหว่างการทดสอบในชั้นเรียนการทดสอบต่างๆและล้างข้อมูลหลังจากการทดสอบทั้งหมดในชั้นเรียนทดสอบเสร็จสิ้น
บางครั้งคุณอาจต้องการแบ่งปันวัตถุติดตั้งระหว่างชั้นทดสอบหลายชั้น ตัวอย่างฐานข้อมูลที่ใช้สำหรับการติดตั้งคลาสเป็นตัวอย่างที่ดี: คุณอาจต้องการเริ่มต้นฐานข้อมูลด้วยชุดข้อมูลทดสอบจากนั้นปล่อยข้อมูลการทดสอบนั้นไว้เพื่อใช้โดยคลาสทดสอบหลายชั้น คุณสามารถใช้คุณลักษณะคอลเลกชันฟิกซ์เจอร์ของ xUnit.net เพื่อแชร์อินสแตนซ์อ็อบเจ็กต์เดียวระหว่างการทดสอบในคลาสทดสอบต่างๆ
ในการใช้อุปกรณ์ติดตั้งคอลเลกชันคุณต้องทำตามขั้นตอนต่อไปนี้:
สร้างคลาสฟิกซ์เจอร์และใส่โค้ดเริ่มต้นในตัวสร้างคลาสฟิกซ์เจอร์ หากคลาสฟิกซ์เจอร์จำเป็นต้องทำการล้างข้อมูลให้ใช้ IDisposable บนคลาสฟิกซ์เจอร์และใส่โค้ดล้างข้อมูลในเมธอด Dispose () สร้างคลาสนิยามคอลเลกชันตกแต่งด้วยแอตทริบิวต์ [CollectionDefinition] ตั้งชื่อเฉพาะที่จะระบุคอลเล็กชันการทดสอบ เพิ่ม ICollectionFixture <> ในคลาสนิยามคอลเลกชัน เพิ่มแอตทริบิวต์ [Collection] ให้กับคลาสทดสอบทั้งหมดที่จะเป็นส่วนหนึ่งของคอลเล็กชันโดยใช้ชื่อเฉพาะที่คุณระบุให้กับแอตทริบิวต์ [CollectionDefinition] ของคลาสการทดสอบ หากคลาสทดสอบต้องการเข้าถึงอินสแตนซ์ฟิกซ์เจอร์ให้เพิ่มเป็นอาร์กิวเมนต์ตัวสร้างและจะได้รับการจัดเตรียมโดยอัตโนมัติ นี่คือตัวอย่างง่ายๆ:
public class DatabaseFixture : IDisposable
{
public DatabaseFixture()
{
Db = new SqlConnection("MyConnectionString");
}
public void Dispose()
{
}
public SqlConnection Db { get; private set; }
}
[CollectionDefinition("Database collection")]
public class DatabaseCollection : ICollectionFixture<DatabaseFixture>
{
}
[Collection("Database collection")]
public class DatabaseTestClass1
{
DatabaseFixture fixture;
public DatabaseTestClass1(DatabaseFixture fixture)
{
this.fixture = fixture;
}
}
[Collection("Database collection")]
public class DatabaseTestClass2
{
}
xUnit.net ถือว่าอุปกรณ์ติดตั้งคอลเลกชันในลักษณะเดียวกับคลาสฟิกซ์เจอร์ยกเว้นอายุการใช้งานของอ็อบเจ็กต์ฟิกซ์เจอร์คอลเลกชันนานกว่า: ถูกสร้างขึ้นก่อนที่จะรันการทดสอบในคลาสทดสอบใด ๆ ในคอลเล็กชันและจะไม่มีการล้าง จนกว่าคลาสทดสอบทั้งหมดในคอลเล็กชันจะทำงานเสร็จสิ้น
นอกจากนี้ยังสามารถตกแต่งคอลเลคชันการทดสอบด้วย IClassFixture <> xUnit.net ถือว่าสิ่งนี้เหมือนกับว่าแต่ละคลาสทดสอบในคอลเลคชันการทดสอบได้รับการตกแต่งด้วยอุปกรณ์ประจำคลาส
คอลเล็กชันการทดสอบยังมีผลต่อวิธีที่ xUnit.net เรียกใช้การทดสอบเมื่อรันแบบขนาน สำหรับข้อมูลเพิ่มเติมโปรดดูที่การรันการทดสอบแบบขนาน
หมายเหตุสำคัญ: ส่วนควบต้องอยู่ในชุดประกอบเดียวกับการทดสอบที่ใช้