मैं उसी उत्तर की तलाश में था, और इस समय xUnit प्रलेखन क्लास फिक्स्चर और संग्रह फिक्स्चर को कैसे लागू किया जाए, इसके बारे में बहुत उपयोगी है जो डेवलपर्स को क्लास या क्लास स्तर के समूह में सेटअप / फाड़ कार्यक्षमता की एक विस्तृत श्रृंखला देता है। यह गीर सैगबर्ग के जवाब के अनुरूप है, और यह देखने के लिए अच्छा कंकाल कार्यान्वयन देता है कि इसे कैसा दिखना चाहिए।
https://xunit.github.io/docs/shared-context.html
संग्रह फिक्स्चर कब उपयोग करें: जब आप एक एकल परीक्षण संदर्भ बनाना चाहते हैं और इसे कई परीक्षण कक्षाओं में परीक्षणों के बीच साझा करते हैं, और परीक्षण कक्षाओं में सभी परीक्षण समाप्त होने के बाद इसे साफ किया है।
कभी-कभी आप कई परीक्षण कक्षाओं के बीच एक फ़िक्चर ऑब्जेक्ट साझा करना चाहेंगे। वर्ग जुड़नार के लिए उपयोग किया जाने वाला डेटाबेस उदाहरण एक महान उदाहरण है: आप एक डेटाबेस को परीक्षण डेटा के एक सेट के साथ प्रारंभ करना चाहते हैं, और फिर उस परीक्षण डेटा को कई परीक्षण कक्षाओं द्वारा उपयोग के लिए छोड़ सकते हैं। आप कई परीक्षण वर्ग में परीक्षणों के बीच एक ही वस्तु उदाहरण साझा करने के लिए xUnit.net की संग्रह स्थिरता सुविधा का उपयोग कर सकते हैं।
संग्रह जुड़नार का उपयोग करने के लिए, आपको निम्नलिखित कदम उठाने की आवश्यकता है:
फ़िक्चर क्लास बनाएँ, और फ़िक्चर क्लास कंस्ट्रक्टर में स्टार्टअप कोड डालें। यदि फ़िक्चर क्लास को क्लीनअप करने की आवश्यकता है, तो फ़िक्सेरिटी क्लास पर आईडीसॉपी को लागू करें और क्लीनअप कोड को डिस्पोज़ () विधि में डालें। संग्रह परिभाषा वर्ग बनाएं, इसे [CollectionDefinition] विशेषता के साथ सजाते हुए, यह एक अनूठा नाम देता है जो परीक्षण संग्रह की पहचान करेगा। संग्रह परिभाषा वर्ग में ICollectionFixture <> जोड़ें। [संग्रह] विशेषता को सभी परीक्षण वर्गों में जोड़ें, जो संग्रह का हिस्सा होगा, जो आपके द्वारा संग्रह संग्रह परिभाषा वर्ग [[CollectionDefinition] विशेषता के लिए प्रदान किए गए अद्वितीय नाम का उपयोग कर रहा है। यदि परीक्षण वर्गों को स्थिरता उदाहरण तक पहुंच की आवश्यकता है, तो इसे एक निर्माता तर्क के रूप में जोड़ें, और यह स्वचालित रूप से प्रदान किया जाएगा। ये रहा एक सरल उदाहरण:
public class DatabaseFixture : IDisposable
{
public DatabaseFixture()
{
Db = new SqlConnection("MyConnectionString");
// ... initialize data in the test database ...
}
public void Dispose()
{
// ... clean up test data from the database ...
}
public SqlConnection Db { get; private set; }
}
[CollectionDefinition("Database collection")]
public class DatabaseCollection : ICollectionFixture<DatabaseFixture>
{
// This class has no code, and is never created. Its purpose is simply
// to be the place to apply [CollectionDefinition] and all the
// ICollectionFixture<> interfaces.
}
[Collection("Database collection")]
public class DatabaseTestClass1
{
DatabaseFixture fixture;
public DatabaseTestClass1(DatabaseFixture fixture)
{
this.fixture = fixture;
}
}
[Collection("Database collection")]
public class DatabaseTestClass2
{
// ...
}
xUnit.net संग्रह जुड़नार को कक्षा जुड़नार की तरह ही व्यवहार करता है, सिवाय इसके कि एक संग्रह स्थिरता का जीवनकाल लंबा होता है: यह संग्रह में किसी भी परीक्षण वर्ग में किसी भी परीक्षण को चलाने से पहले बनाया जाता है, और इसे साफ नहीं किया जाएगा संग्रह में सभी परीक्षण कक्षाएं चलने तक समाप्त हो गई हैं।
टेस्ट कलेक्शन को IClassFixचर <> से भी सजाया जा सकता है। xUnit.net इसे मानता है, हालांकि परीक्षण संग्रह में प्रत्येक व्यक्तिगत परीक्षण वर्ग को वर्ग निर्धारण के साथ सजाया गया था।
टेस्ट कलेक्शन भी उसी तरह प्रभावित करते हैं जिस तरह से xUnit.net उन्हें समानांतर में चलाते हुए परीक्षण चलाता है। अधिक जानकारी के लिए, समानांतर में रनिंग टेस्ट देखें।
महत्वपूर्ण नोट: फिक्स्चर को उसी विधानसभा में होना चाहिए जो परीक्षण उनका उपयोग करता है।