2016-05-05 6 views
8

मैं वर्तमान में नकली कैसे हूं इस पर भ्रमित हूं।मॉक। <Object> वीएस मॉक <Object>()

मैं Moq का उपयोग कर रहा हूँ। नकली वस्तुओं के लिए मैं आम तौर पर इस तरह से

var mockIRepo = new Mock<IRepo>(); 

हालांकि, मैं अपने सेटअप के लिए नकली वस्तु बनाने की जरूरत लिखें।

विकल्प 1 क्या मेरे ऑब्जेक्ट का नकल करना बेहतर है जिसमें केवल इस तरह के गुण होते हैं?

var object = Mock.Of<Object>() 

Option2 या इस तरह

var object = new Mock<Object>() 

मुझे लगता है कि विकल्प 2 setupproperties जो मेरे लिए थोड़े संदिग्ध है क्योंकि मैं भी विकल्प में गुण सेट सकता है पढ़ा है 1.

फिर अंतर क्या है? या कोई बेहतर तरीका है?

+1

यहाँ है इस सवाल का जवाब (वर्ग का एक उदाहरण देता है) - https : //cmatskas.com/improve-your-unit-tests-with-mock-of/ – niksofteng

उत्तर

-2

यही कारण है कि मुझे सभी चर के लिए var कीवर्ड पसंद नहीं है। विकल्प 2 एक मॉक < टी > देता है जबकि विकल्प 1 लौटाता है। असल में यह सिंटैक्स अंतर है। आप विधियों को एक अलग तरीके से नकल कर सकते हैं। दस्तावेज देखें।

+0

नकारात्मक प्रतिक्रिया पर कोई टिप्पणी? –

7

इस पोस्ट में मुझे Mock.Of < टी > समझने में मदद मिली: Old style imperative Mock<T> vs functional Mock.Of<T>

के रूप में पोस्ट में बताया गया है, Mock.Of < टी > तुम कह रहे हो "मुझे एक नकली है कि इस तरह बर्ताव करता है दे दो 'के साथ (या नकली एस। < टी > यदि आपको कई ऑब्जेक्ट्स (IENumerable) प्राप्त करने की आवश्यकता है)। यह एक नकली की घोषणा अधिक संक्षेप में करता है।

नकली < टी > (एक नकली रिटर्न)

var el1 = new Mock<IElementInfo>(); 
el1.Setup(x => x.Id).Returns(Guid.NewGuid()); 
el1.Setup(x => x.Multiplicity).Returns(Multiplicity.Single); 

var c1 = new Mock<ICollectionInfo>(); 
c1.Setup(x => x.Id).Returns(Guid.NewGuid()); 
c1.Setup(x => x.Multiplicity).Returns(Multiplicity.Multiple); 

var p1 = new Mock<IPropertyInfo>(); 
p1.Setup(x => x.Id).Returns(Guid.NewGuid()); 
p1.Setup(x => x.Name).Returns("Foo" + Guid.NewGuid().ToString()); 
p1.Setup(x => x.Type).Returns("System.String"); 

var p2 = new Mock<IPropertyInfo>(); 
p2.Setup(x => x.Id).Returns(Guid.NewGuid()); 
p2.Setup(x => x.Name).Returns("Bar" + Guid.NewGuid().ToString()); 
p2.Setup(x => x.Type).Returns("System.String"); 

var elementInfoMock = new Mock<IElementInfo>(); 
elementInfoMock.Setup(e => e.Id).Returns(Guid.NewGuid()); 
elementInfoMock.Setup(e => e.Multiplicity).Returns(Multiplicity.Multiple); 
elementInfoMock.Setup(e => e.Elements) 
    .Returns(new List<IAbstractElementInfo> 
    { 
     el1.Object, 
     c1.Object, 
    }); 
elementInfoMock.Setup(x => x.Properties).Returns(
    new List<IPropertyInfo> 
    { 
     p1.Object, 
     p2.Object, 
    }); 

this.elementInfo = elementInfoMock.Object; 

एक ही उदाहरण Mock.Of < का उपयोग कर टी > साथ उदाहरण

this.elementInfo = Mock.Of<IElementInfo>(x => 
x.Id == Guid.NewGuid() && 
x.Multiplicity == Multiplicity.Multiple && 
x.Elements == new List<IAbstractElementInfo> 
{ 
    Mock.Of<IElementInfo>(e => e.Id == Guid.NewGuid() && e.Multiplicity == Multiplicity.Single), 
    Mock.Of<ICollectionInfo>(e => e.Id == Guid.NewGuid() && e.Multiplicity == Multiplicity.Single), 
} && 
x.Properties == new List<IPropertyInfo> 
{ 
    Mock.Of<IPropertyInfo>(p => p.Id == Guid.NewGuid() && p.Name == "Foo" + Guid.NewGuid() && p.Type == "System.String"), 
    Mock.Of<IPropertyInfo>(p => p.Id == Guid.NewGuid() && p.Name == "Foo" + Guid.NewGuid() && p.Type == "System.String"), 
}); 
संबंधित मुद्दे