2012-05-26 4 views
7

का उपयोग कर इकाई परीक्षण सेवा कैसे करें मैं अपने वर्तमान प्रोजेक्ट पर माइक्रो ORM के रूप में PetaPoco का उपयोग कर रहा हूं और मुझे यह कहना होगा कि मुझे यह पसंद है। दोनों IMyService और PetaPoco.Database के इंजेक्शन के लिए PetaPoco.DatabasePetaPoco.Database

public class MyService : IMyService 
{ 
    private readonly PetaPoco.Database _database; 

    public MyService(PetaPoco.Database database) 
    { 
     _database = database; 
    } 

    public void SaveSomething(MyObject myObject) 
    { 
     //...custom logic 
     _database.Save(myObject); 
    } 
} 

मैं आईओसी (Castle.Windsor) का उपयोग कर रहा इकाई परीक्षण सेवाओं है कि का उपयोग करें - हालांकि, मैं अपने आप सरल परिदृश्य के साथ संघर्ष कर पाया जहां भी आवश्यक हो।

अब, जब मैं अपने सेवा का परीक्षण इकाई करने की कोशिश मैं यह सत्यापित करने सहेजें विधि ठीक से लागू किया गया था में ठीक से नकली ठूंठ PetaPoco.Database में असमर्थ हूँ। मैं NUnit और राइनो का उपयोग कर रहा हूं। यूनिट परीक्षण और मॉकिंग के लिए मैक्स।

[TestFixture] 
public class MyServiceTests 
{ 

    private PetaPoco.Database _database; 

    [SetUp] 
    public void SetUp() 
    { 
     _database = MockRepository.GenerateMock<Database>(""); 
    } 

    [Test] 
    public void ShouldProperlySaveSomething() 
    { 
     //Arrange 
     var myObject = new MyObject(); 
     _database.Expect(db => db.Save(Arg<MyObject>.Is.Anything)); 
     var myService = new MyService(_database); 

     //Act 
     myService.SaveSomething(myObject); 

     //Assert 
     _database.VerifyAllExpectations(); 
    } 

} 

मुझे पता है कि यह अगर मैं PetaPoco.Database से एक अंतरफलक निकालने और इसके खिलाफ, या PetaPoco के तरीकों है कि मैं नकली करना चाहते virtualizing से मजाक कर हल किया जा सकता है, लेकिन मुद्दा यह है कि मैं है पेटापोको में परिवर्तन नहीं करना चाहते हैं।

क्या यह करने योग्य है?

उत्तर

4

मेरी शाखा यहां स्थित है: https://github.com/schotime/PetaPoco डेटाबेस डेटाबेस के लिए पहले से ही एक इंटरफ़ेस परिभाषित किया गया है।

इसके अलावा मेरा नया फोर्क https://github.com/schotime/NPoco या एनपीओओ पर न्यूजेट है जो एक ही एपीआई है।

मैं इनमें से किसी एक का उपयोग करूंगा। ;)

+0

ग्रेट जॉब @ स्कोटाइम, यह वही है जो मुझे चाहिए! हालांकि, मैं उत्सुक हूं, क्या आपने मूल कोडबेस पर पुल अनुरोध बनाने की कोशिश की है? – ljubomir

+0

कई बार, लेकिन अब लाइब्रेरी के हिस्से के रूप में मेरे पास बहुत अधिक सुविधाएं हैं, जिनमें बहुत से बग फिक्स हैं इसलिए वे लगभग दो अलग हैं। – Schotime

+0

क्या पेटापोको की सभी सुविधाएं समर्थित हैं (जैसे टेम्पलेट्स) या क्या सामान गुम है? ऐसा लगता है कि यह कांटा भी करता है जो यह प्लगइन पेटापोको करता है। रिलेशनशिप एक्सटेंशन। क्या आप एक ही कोड का उपयोग कर रहे हैं?मैं सोच रहा हूं क्योंकि आपको अपनी कुछ विशेषताओं पर कोई दस्तावेज नहीं दिख रहा है, इसलिए उम्मीद है कि मैं अन्य मौजूदा प्लगइन से उदाहरणों का उपयोग कर सकता हूं। – chobo2

1

आप पहले ही पेटापोको.डेटाबेस के साथ आईएमईएस सेवा इंटरैक्शन का उपयोग कर इंटरैक्शन कर रहे हैं, तो आपको इसके लिए एक और अमूर्तता क्यों चाहिए? आपके वर्तमान दृष्टिकोण के साथ आप IMyService का उपयोग कर डेटाबेस के साथ इंटरैक्शन का परीक्षण करने में सक्षम होना चाहिए, उदा।

public class AuthenticationService 
{ 
    private IMyService myService; 

    public AuthenticationService(IMyService service) 
    { 
     ... 
    } 

    public void Authenticate(string username, string password) 
    { 
     var user = myService.GetUser(username); // <-- Hits the database 
    } 
} 

और इसका परीक्षण करने के लिए आप केवल IMyService के नकली/स्टब का उपयोग करके बातचीत करते हैं।

अब आपके मूल समाधान के संबंध में, यदि पेटपापो सार्वजनिक विधियां वर्चुअल नहीं हैं, तो मैं इसे फोर्क कर दूंगा, कोड को ठीक कर दूंगा और उन्हें एक पुल अनुरोध भेजूंगा। अन्यथा, आपका दृष्टिकोण मुझे ठीक लग रहा है।

+1

आपके उत्तर @ हादी के लिए धन्यवाद। जिस बिंदु पर मैं यह सवाल पूछ रहा हूं, इस तथ्य में निहित है कि मैं अलगाव में माईस सर्विस बिजनेस लॉजिक का परीक्षण करना चाहता हूं, यानी मैं डेटाबेस को हिट नहीं करना चाहता हूं, और साथ ही मैं यह सुनिश्चित करना चाहता हूं कि डेटाबेस कॉल पेटापोको के माध्यम से ट्रिगर हो। जिस तरह से मैं इसे देखता हूं, यह केवल ** PetaPoco.Database ** का मज़ाक उड़ाकर संभव है। – ljubomir

+0

कोड को फोर्किंग, दूसरी तरफ मेरे लिए एक अच्छा समाधान प्रतीत होता है, मैं इसे आज़मा सकता हूं। – ljubomir