2015-09-09 8 views
6

मैं हमारी सेवा में ऑटोमैपर लागू करने पर काम कर रहा हूं और हमारे यूनिट परीक्षणों में एक बहुत ही भ्रमित समस्या देख रहा हूं।बच्चे वर्ग से अनुरोध किए जाने पर ऑटोमैपर को अभिभावक वर्ग से कैसे रोकें

public class DbParty : ActiveRecordBase<DbParty> 
{ 
    public IList<DbPartyAccountRole> PartyAccountRoles { get; set; } 
    public IList<DbAccount> Accounts {get; set;} 
} 

public class DbPartyAccountRole : ActiveRecordBase<DbPartyAccountRole> 
{ 
    public DbParty Party { get; set; } 
    public DbAccount Account { get; set; } 
} 

:

public class DbAccount : ActiveRecordBase<DbAccount> 
{ 
    // this is the ORM entity 
} 

public class Account 
{ 
    // this is the primary full valued Dto 
} 

public class LazyAccount : Account 
{ 
    // this class as it is named doesn't load the majority of the properties of account 
} 

Mapper.CreateMap<DbAccount,Account>(); 
//There are lots of custom mappings, but I don't believe they are relevant 

Mapper.CreateMap<DbAccount,LazyAccount>(); 
//All non matched properties are ignored 

यह भी हालांकि मैं इस बिंदु पर AutoMapper के साथ इन मैप नहीं है, इन वस्तुओं शामिल है:

इस मुद्दे से दूर पहले निम्नलिखित वस्तुओं और उनके संबंधित नक्शे शामिल इन वर्गों को कस्टम कोड का उपयोग करके परिवर्तित किया गया है जिसमें निम्नलिखित शामिल हैं, जहां source एक डीबीपार्टी है:

var party = new Party() 
//field to field mapping here 

foreach (var partyAccountRole in source.PartyAccountRoles) 
{ 
    var account = Mapper.Map<LazyAccount>(partyAccountRole.Account); 
    account.Party = party; 
    party.Accounts.Add(account); 
} 

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

जब अपने आप में चलाने के इस परीक्षण बस ठीक काम करता है, लेकिन जब एक और परीक्षण के रूप में एक ही सत्र में चलाने (मैंने नीचे जाएगा कि) के ऊपर रूपांतरण कोड में मैपर कॉल इस अपवाद फेंकता है:

System.InvalidCastException : Unable to cast object of type '[Namespace].Account' to type '[Namespace].LazyAccount'. 

दूसरा परीक्षण भी एक नया डीबीपार्टी बनाता है लेकिन केवल एक डीबीएक्टाउंट के साथ और फिर 3 डीबीपार्टी अकाउंट रोल बनाता है। मैं सटीक लाइन है कि अन्य परीक्षण टूट जाता है करने के लिए नीचे इस परीक्षण को संकीर्ण करने में सक्षम था और यह है:

Assert.That(DbPartyAccountRole.FindAll().Count(), Is.EqualTo(3)) 

इस लाइन बाहर टिप्पणी करते हुए अन्य परीक्षा उत्तीर्ण करने देता है।

उस जानकारी के साथ मेरा अनुमान है कि यह परीक्षण है कि कैसलप्रोक्सी के साथ कुछ करने की वजह से परीक्षण टूट रहा है जो डीबीएक्वाउंट ऑब्जेक्ट के पीछे ऑटोमैपर को कॉल करते समय है लेकिन मुझे इसका थोड़ा सा विचार नहीं है।

अब मैं प्रासंगिक कार्यात्मक परीक्षण (सेवा के खिलाफ कॉल करने के लिए) चलाने में कामयाब रहा हूं और वे ठीक काम करने लगते हैं, इससे मुझे लगता है कि इकाई परीक्षण सेटअप एक कारक हो सकता है, सबसे उल्लेखनीय यह है कि परीक्षण प्रश्न स्मृति डेटाबेस में एक SQLLite के खिलाफ चलाए जाते हैं।

+0

मैं इस मुद्दे को उत्पन्न करने वाले सटीक परीक्षण को खोजने की प्रक्रिया में हूं। – Phaeze

+0

मुझे सटीक परीक्षण मिला है, और उस परीक्षण के भीतर भी सटीक रेखा है और मैंने इसे साफ़ करने के लिए प्रश्न को फिर से लिखा है और अधिक संदर्भ जोड़ें – Phaeze

उत्तर

0

समस्या परीक्षण इकाई में ऑटोमैपर बूटस्ट्रैप को कई बार चलाने से संबंधित होने के कारण समाप्त हो गया; आविष्कार हमारे परीक्षण आधार वर्ग पर TestFixtureSetup विधि में था।

ठीक नक्शे बनाने से पहले निम्न पंक्ति जोड़ने के लिए किया गया था:

Mapper.Reset(); 

मैं अभी भी क्यों यह केवल नक्शा है कि एक मुद्दा था जानने के लिए उत्सुक हूँ।

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