2012-12-10 13 views
5

के साथ यूनिट परीक्षण इंटरफेस मैं मोक और यूनिट परीक्षण के लिए नया हूं। मैं एक इकाई परीक्षण कर रहे हैं और यह निम्नलिखित कोड है:मोक

private Mock<IServiceAdapter> repository; 

    [TestInitialize] 
    public void Initialize() 
    { 
     repository= new Mock<IServiceAdapter>(); 
    } 

[TestMethod()] 
    public void SaveTest() 
    { 
     //Setup 
     string Name = "Name1"; 
     string Type = "1"; 
     string parentID = null; 

     repository.Setup(x => x.Save(Name , Type, parentID)).Returns("Success").Verifiable(); 

     //Do 
     var result = repository.Object.Save(Name , Type, parentID); 
     //Assert 
     repository.Verify(); 
    } 

मेरे समस्या यह है कि परीक्षण हमेशा स्ट्रिंग है कि मैं रिटर्न पैरामीटर में डाल दिया, दूसरे शब्दों में वापस आ जाएगी, यह हमेशा वापस आ जाएगी "सफलता "या जो भी मैं अपनी जगह में लिखता हूं। मुझे लगता है कि यह सही नहीं है क्योंकि यह सेवा का असली व्यवहार नहीं है। कोई भी जानता है कि मैं "सेव" सेवा के वास्तविक व्यवहार को कैसे मिरर कर सकता हूं जिसे मैं परीक्षण करने की कोशिश कर रहा हूं? तो मान लें, अगर वापसी स्ट्रिंग सेवा विधि से अलग है, तो परीक्षण विफल होना चाहिए।

संपादित

ServiceAdapter इंटरफ़ेस इसकी सिर्फ एक वेब सेवा जो मैं एक बाकी सेवा की तरह फोन के लिए एक आवरण। यह एक वेब फॉर्म परियोजना है।

मैं इस पोस्ट

How to mock a web service

मैं निर्भरता इंजेक्शन के साथ एक FakeController की तरह कुछ यह काम करने के लिए बनाना चाहिए में की तरह कुछ कर रहा हूँ?

उत्तर

11

आप यहां नकली परीक्षण कर रहे हैं, जो आपको कुछ भी नहीं देता है (क्योंकि यह नकली आपके असली एप्लिकेशन में उपयोग नहीं किया जाता है)। यूनिट-परीक्षण में आपको अपनी वास्तविक वस्तुओं को बनाना और परीक्षण करना चाहिए, जो आपके असली एप्लिकेशन (यानी इंटरफ़ेस कार्यान्वयन) में मौजूद हैं। परीक्षण के तहत वस्तुओं की निर्भरताओं का मज़ाक उड़ाते हुए मोक्स का इस्तेमाल किया जाता है।

तो, सेवा एडाप्टर का मॉक ऑब्जेक्ट के परीक्षणों के लिए उपयोगी होगा, जो एडाप्टर का उपयोग करता है, उदा। कुछ नियंत्रक परीक्षण:

private FooController _controller; // object under test, real object 
private Mock<IServiceAdapter> _serviceAdapter; // dependency of controller 

[TestInitialize] 
public void Initialize() 
{ 
    _serviceAdapter = new Mock<IServiceAdapter>(); 
    _controller = new FooController(_serviceAdapter.Object); 
} 

[TestMethod()] 
public void SaveTest() 
{ 
    // Arrange 
    string name = "Name1"; 
    string type = "1"; 
    string parentID = null; 

    _serviceAdapter.Setup(x => x.Save(name , type, parentID)) 
        .Returns("Success").Verifiable(); 

    // Act on your object under test! 
    // controller will call dependency 
    var result = _controller.Bar(name , type, parentID); 

    // Assert 
    Assert.True(result); // verify result is correct 
    _serviceAdapter.Verify(); // verify dependency was called 
} 
+0

मुझे यहां कुछ याद आ रही है। मेरे पास नियंत्रक नहीं है (यह वेब रूप है)। मैं इस सवाल में और जानकारी डालूंगा। –

+0

@ मॉर्गनसोरेन नियंत्रक सिर्फ एक उदाहरण था। यह कोई अन्य वर्ग हो सकता है जो आपके सेवा एडाप्टर का उपयोग करता है। मुझे लगता है कि वेब फॉर्म बहुत यूनिट टेस्टेबल नहीं हैं, आमतौर पर एमवीपी पैटर्न टेस्टेबल वेब फॉर्म एप्लिकेशन बनाने के लिए उपयोग किया जाता है। –

+0

@ मॉर्गन सोरेन यहां [यूनिट-टेस्टिंग वेब फॉर्म] के बारे में प्रश्न है (http://programmers.stackexchange.com/questions/116089/is-is-possible-to-unit-test-a-web-forms-site) –

संबंधित मुद्दे