2015-08-18 8 views
6

ऑटोफोनफिगर्ड मॉक कस्टमाइज़ेशन के साथ स्वतः कॉन्फ़िगरेशन को कॉन्फ़िगर किया गया है ताकि इंटरफ़ेस और इसके केवल-पढ़ने वाले गुणों को स्वचालित रूप से मॉक कर सकें?AutoConfiguredMoqCustomization और unsettable गुण

स्पष्ट बातें करने के लिए, के मैं इस तरह के एक अंतरफलक है मान लें:

public interface A { 
    int Property {get;} 
} 

और इस तरह के वर्ग:

public class SomeClass { 
    public SomeClass(A dependency) {} 
} 

मैं क्या था dependency एक नकली है कि कुछ वापस आ जाएगी का संकल्प लिया है dependency.Property:

var fixture = new Fixture().Customize(new AutoConfiguredMoqCustomization()); 
var sut = fixture.Create<SomeClass>(); // <- dependency passed to SomeClass' constructor will have .Property returning null 
+1

मैं केवल Moq के नवीनतम संस्करण के साथ इस पुन: पेश कर सकते हैं - संस्करण को स्थापित करने की कोशिश '4.1.1308.2120 'इसके बजाय:' इंस्टॉल-पैकेज Moq -version 4.1.1308.2120'। – dcastro

उत्तर

5

यह एक बग के कारण है I Moq 4.2.1502.911 में ntroduced, जहां SetupAllProperties केवल-प्राप्त गुणों पर किए गए पिछले सेटअप ओवरराइड करता है।

public interface Interface 
{ 
    string Property { get; } 
} 

var a = new Mock<Interface>(); 

a.Setup(x => x.Property).Returns("test"); 
a.SetupAllProperties(); 

Assert.NotNull(a.Object.Property); 

यह वही है AutoFixture Interface का एक उदाहरण बनाने के लिए पर्दे के पीछे से करता है की तरह है:

यहाँ एक सरल रेप्रो है। यह परीक्षण 4.2.1502.911 के बराबर या उससे अधिक Moq के संस्करणों के साथ विफल रहता है, लेकिन निम्न संस्करणों के साथ गुजरता है।

आप पैकेज प्रबंधक कंसोल पर इस चलाएँ:

install-package Moq -version 4.2.1409.1722 

इस बग यहाँ रखी जा रही है: https://github.com/Moq/moq4/issues/196

+1

+1 यह उल्लेखनीय हो सकता है कि हम ऑटोफिक्चर में भी इस मुद्दे को ट्रैक कर रहे हैं: https://github.com/AutoFixture/AutoFixture/issues/434 –

+0

आपकी सहायता के लिए धन्यवाद। मेरे पास अभी तक आपके कामकाज का प्रयास करने का समय नहीं था। मैंने जो किया वह गुणों को सेटटेबल करने के लिए बदल रहा था, और यह ठीक काम किया। – SOReader

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