मान लीजिए आप एक विधि है:इकाई परीक्षण (हाँ या नहीं)
public void Save(Entity data)
{
this.repositoryIocInstance.EntitySave(data);
}
आप बिल्कुल एक इकाई परीक्षण लिखने चाहेंगे?
public void TestSave()
{
// arrange
Mock<EntityRepository> repo = new Mock<EntityRepository>();
repo.Setup(m => m.EntitySave(It.IsAny<Entity>());
// act
MyClass c = new MyClass(repo.Object);
c.Save(new Entity());
// assert
repo.Verify(m => EntitySave(It.IsAny<Entity>()), Times.Once());
}
बाद में यदि आप ऐसा करने के लिए परिवर्तन विधि के कार्यान्वयन करना क्योंकि अधिक "जटिल" सामान की तरह:
public void Save(Entity data)
{
if (this.repositoryIocInstance.Exists(data))
{
this.repositoryIocInstance.Update(data);
}
else
{
this.repositoryIocInstance.Create(data);
}
}
... अपने इकाई परीक्षण विफल हो जाएगा लेकिन यह शायद आपके आवेदन को तोड़ने नहीं होगा ...
प्रश्न
मैं भी तरीकों पर इकाई परीक्षण बनाने के लिए परेशान करना चाहिए कि में कोई वापसी प्रकार नहीं है * या ** आंतरिक नकली के बाहर कुछ भी नहीं बदलते हैं?
आपका उत्तर अब तक के सबसे नज़दीक है जो मैं जानना चाहता था। लेकिन आप इस मामले में दूसरी गोली बुलेट रिपोजिटरी करेंगे और विधि नहीं, है ना? –
मुझे ऐसा नहीं लगता है। यह एक ऑब्जेक्ट हो सकता है जिसमें एक सूची (या शायद एक सेट, जो आप चाहते हैं उस पर निर्भर करता है) और "EntitySave" केवल इकाई को जोड़ देगा (यदि मौजूद है? मुझे नहीं पता कि यह कैसे काम करना चाहिए)। एकाधिक तालिकाओं में शामिल नहीं हो रहा है, या आपके भंडार की अन्य जटिल सामग्री नहीं हो सकती है। –
आपका ऑब्जेक्ट कार्यान्वयन अधिक महंगा होगा, जैसा कि उल्लेख किया गया है, लेकिन आईएमएचओ यह देखने का सबसे अच्छा तरीका है कि कॉल लगातार तरीके से किया गया था या नहीं। –