तो मूल रूप से मेरे पास एक डोमेन ऑब्जेक्ट और एक सामान्य भंडार है जो उस ऑब्जेक्ट के साथ सीआरयूडी संचालन कर सकता है।मैं एनयूनीट के साथ जेनेरिक बेसटेस्ट कैसे बना सकता हूं जिसे मैं प्राप्त कर सकता हूं और बेस रन से परीक्षण कर सकता हूं?
public interface IBaseRepository<T> where T : BaseEntity
{
void Add(T entity);
void Remove(T entity);
T ById(int id);
IEnumerable<T> All();
}
तो मेरे पास इस इंटरफ़ेस के कई कार्यान्वयन हैं, प्रत्येक डोमेन ऑब्जेक्ट के लिए एक।
मैं कुछ एकीकरण परीक्षणों (nunit प्रयोग करके) और उस के लिए मैं समझ मैं एक BaseRepositoryTest बनाने चाहते हैं लिखने के लिए चाहते हैं - इस तरह:
public abstract class BaseRepositoryTests<T> where T : BaseEntity
{
public abstract IBaseRepository<T> GetRepository();
public abstract T GetTestEntity();
[Test]
public void AddWhenCallingAddsObjectToDatabase()
{
IBaseRepository<T> repository = GetRepository();
T entity = GetTestEntity();
repository.Add(entity);
}
}
अब, मैं कैसे लागू करने के लिए होगा एक डोमेन वस्तु के लिए रेपॉजिटरी शुरू करने और परीक्षण इकाई बनाने के लिए, जो उचित लगता है, दिया गया है, क्योंकि वे अलग होंगे ...
मुझे बस इतना करना है कि वास्तविक परीक्षण स्थिरता सही है? इस तरह:
[TestFixture]
public class FooRepositoryTests: BaseRepositoryTests<Foo>
{
public override IBaseRepository<Foo> GetRepository()
{
throw new NotImplementedException();
}
public override Foo GetTestEntity()
{
throw new NotImplementedException();
}
}
यह हो मुझे शुरू कर दिया और मुझे एक असफल परीक्षण के बाद से फेंक यह टूट जाएगा (मैं भी कोई भाग्य के साथ तरीकों को लागू करने की कोशिश की वास्तव में) देना चाहिए। लेकिन testrunners (दोनों nunits जीयूआई और resharpers परीक्षण धावक दोनों की कोशिश की) बस मेरे आधार परीक्षण को अनदेखा करें! यह दिखाता है और सब - लेकिन वापस अनदेखा के रूप में रिपोर्ट की।
तो मैं खुदाई का एक छोटा सा था ... NUnit TextFixtureAttribute आप आप किस तरह का परीक्षण कर रहे हैं तो मैं विशेषता
[TestFixture(typeof(Foo))]
डालने की कोशिश की पहली तारीख को बेस और निर्दिष्ट कर सकते हैं कि यह संपत्ति है भी फू संस्करण। जब फू संस्करण पर रखा जाता है, तब भी यह आधार से परीक्षण को अनदेखा करता है, और जब मैं इसे आधार पर डालता हूं ... अच्छा यह लाल हो जाता है क्योंकि विधियां अपवाद फेंकता है, जो कि अच्छा होगा, सिवाय इसके कि जब मैं वास्तविक कार्यान्वयन करता हूं FooTests में, वे अभी भी काम नहीं करेंगे (स्पष्ट रूप से टेस्टफिक्चर विशेषता को दिया गया बेस टेस्ट कभी नहीं जानता कि कक्षाएं किस वर्ग से प्राप्त होती हैं, तो कार्यान्वयन को कैसे पता चल जाएगा)।
तो मैं क्या करने के लिए अटक गया हूँ? मैं बेस टेस्ट क्लास वर्चुअल में टेस्ट कर सकता हूं और फिर इसे FooBaseRepositoryTests में ओवरराइड कर सकता हूं, केवल आधार से कार्यान्वयन को कॉल करने के लिए, जो मुझे लगता है कि एक लंगड़ा समाधान है ...
और क्या करना है? क्या मैं कुछ भूल रहा हूँ? कृपया मदद करें, कोई ... :)
मैं आपका पॉइंट देखता हूं, धन्यवाद :) यह मेरी समस्या को हल नहीं करता है, क्योंकि सारफिक्शनबेस ने ' "AddWhenCallingAddsObjectToDatabase()" के लिए तर्क प्राप्त करने में सक्षम होने के लिए, मुझे सभी व्युत्पन्न जुड़नारों के लिए लगभग समान कार्यान्वयन लिखने में सक्षम ... –
मैं आपके उत्तर को सही के रूप में फ़्लैग कर रहा हूं। मुझे लगता है कि यह न्यूटिट के साथ संभव नहीं है, इसलिए यह वास्तव में मुझे दिखा रहा है कि एपीआई कैसे काम करता है। –