यह समझें कि यह एक व्यापक प्रश्न की तरह लग सकता है - तो मुझे स्पष्टीकरण दें। मेरे पास एक इंटरफ़ेस के माध्यम से एक रेपॉजिटरी है, जिसमें दो ठोस कार्यान्वयन हैं - मॉक रिपोजिटरी और EntityFrameworkRepository।रिपोजिटरी पर यूनिट-टेस्ट सीआरयूडी ऑपरेशंस को उचित तरीके से कैसे करें?
अब, मैं एक यूनिट टेस्ट मैचों की परियोजना है जिसके लिए सभी परीक्षणों के खिलाफ या तो भंडार चलाया जा सकता है है, [TestInitialize]
में एक लाइन पर flicking के माध्यम से।
मेरा प्रश्न मूल रूप से "मुझे परीक्षण कैसे लिखना चाहिए"।
यहाँ मैं क्या है:
सी reate
// Arrange.
var foo = new Foo { .. };
// Act
Repository.Add(foo);
UnitOfWork.Commit();
// Assert
Assert.IsTrue(foo.Id > 0);
आर etrieve
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(foo.Id, fooToGet);
यू pdate
// Arrange.
var fooToGet = 1;
var nameToChangeFooTo = "FooBar";
// Act
var foo = Repository.FindSingle(fooToGet);
foo.Name = nameToChangeFooTo;
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(fooRetrievedAgain.Id, fooToGet);
Assert.AreEqual(fooRetrievedAgain.Name, nameToChangeFooTo);
डी हटाएं
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
Repository.Remove(foo);
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNull(fooRetrievedAgain);
यह दोनों नकली और EF भंडार के लिए ठीक काम कर रहा है, लेकिन मेरी मुख्य समस्या सी (बनाएं) है। मुझे यकीन नहीं है कि मेरे रिपोजिटरी पर एक ऐड ऑपरेशन का परीक्षण कैसे करें। यह सही महसूस कर रहा है जो मैं कर रहा हूं।
यह ईएफ रिपोजिटरी के लिए गुजरता है, लेकिन इसे मेरे मॉक रिपोजिटरी में पास करने के लिए मुझे इन-मेमोरी संग्रह (गंदा) में आईडी को अपडेट करने के लिए प्रतिबिंब का उपयोग करना पड़ा।
तो क्या आप कृपया कुछ सलाह साझा कर सकते हैं कि रिपोजिटरी पैटर्न पर सीआरयूडी संचालन का परीक्षण करने के सही तरीके क्या हैं?
यह एक एएसपी.नेट एमवीसी एप्लीकेशन, .NET 4, सी #, इकाई फ्रेमवर्क 4 और कार्य/रिपोजिटरी पैटर्न की इकाई है।
धन्यवाद।
संपादित
बस लोगों को स्पष्ट करने के लिए, निम्न सभी इकाई-परीक्षण मैं नहीं कर रहे हैं। मेरे पास मेरी सेवा परत के साथ-साथ व्यवसाय-नियम परीक्षणों के लिए यूनिट परीक्षण हैं।
यदि उपर्युक्त रिपोजिटरी परीक्षण विफल हो जाए तो बाद वाले दोनों (और चाहिए) विफल हो जाएंगे। यह बिंदु है, मेरे रेपॉजिटरीज़ के बहुत बुनियादी परिचालन यूनिट-परीक्षण करने के लिए। क्या मै गलत हु?
आप यहां क्या परीक्षण कर रहे हैं? जैसे आप परीक्षण लिखने के लिए परीक्षण कर रहे हैं की बदबू आ रही है। – jfar
@jfar - वास्तव में मैंने रिपॉजिटरीज़ (टीडीडी) लागू करने से पहले मैंने उन परीक्षणों को लिखा था। क्या आप कह रहे हैं कि आप अपने भंडारों का परीक्षण करने से परेशान नहीं हैं? व्यापार/सिस्टम परीक्षण में कितनी 'अर्थहीन' बग पाए जाएंगे, इस बारे में सोचें। एक ऐसा है जो एक सीआई निर्माण के साथ एक testrun के दौरान (और चाहिए) हाइलाइट किया जा सकता है। क्या आपको नहीं लगता? – RPM1984
और याद रखें, मैं 'इंटरफेस' के माध्यम से परीक्षण कर रहा हूं। 'रिपोजिटरी' प्रकार 'आईआरपीओसेटरी 'प्रकार का है। तो मैं बस इतना करने का प्रयास कर रहा हूं कि मेरा रेस्पॉजिटरीज़ एक स्थिरता स्टोर पर मूल संचालन करने में सक्षम हैं (चाहे वह स्टोर इन-मेमोरी मॉक रेपो या ईएफ रिपोजिटरी हो)। –
RPM1984