2012-02-18 14 views
6

मैं का उपयोग कर समानता के लिए दो निम्न वस्तुओं की तुलना करने में सक्षम होना चाहते हैं AutoFixture.SemanticComparison मिलान की तुलना करें:AutoFixture समानता केवल गुण

var o1 = new Object1 { a = 1 }; 
var o2 = new Object2 { a = 1, b = 2}; 
o1.AsSource().OfLikeness<Object2>().ShouldEqual(o2); 
:

public class Object1 
{ 
    public int a; 
} 

public class Object2 
{ 
    public int a; 
    public int b; 
} 

अब, जब मैं इसे इस तरह से करना

मुझे निम्नलिखित अपवाद मिलता है: "निम्नलिखित सदस्य मेल नहीं खाते: - बी।"

मुझे पता चला कि मैं इस तरह 'बी' के सदस्य भी हटा सकते हैं:

var o1 = new Object1 { a = 1 }; 
var o2 = new Object2 { a = 1, b = 2}; 
o1.AsSource().OfLikeness<Object2>().Without(object2 => object2.b).ShouldEqual(o2); 

हालांकि, मुझे लगता है कि यह काफी बोझिल है, क्योंकि जब भी मैं कक्षा Object2 एक नए सदस्य को जोड़ने के लिए, मैं करने के लिए है मेरे यूनिट परीक्षण (या कम से कम इकाई परीक्षण सहायक) को सही करें।

क्या कहने का कोई तरीका है "मैं सिर्फ दोनों वस्तुओं में मौजूद सबसेट के लिए समानता के साथ तुलना करना चाहता हूं"?

उत्तर

7

ऐसा लगता है कि आप चौराहे पर उनके गुणों के आधार पर दो वस्तुओं की तुलना करना चाहते हैं। यह वर्तमान में लिकनेस क्लास द्वारा समर्थित नहीं है। तर्क यह है:

अभी गंतव्य प्रकार (उपरोक्त उदाहरण में, यह ऑब्जेक्ट 2 होगा) निर्णायक टेम्पलेट है जिस पर मिलान किया जाता है। यह एक दावा के लिए मजबूत कथन प्रदान करता है: इस कक्षा के प्रत्येक सार्वजनिक संपत्ति या क्षेत्र का मिलान किया जाना चाहिए।

हालांकि, गुण के चौराहे मिलान के बारे में एक बयान एक बहुत कमजोर बयान हो सकता है, क्योंकि उस चौराहे खाली हो सकता है। इसका परिणाम False Negatives हो सकता है।

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

हालांकि, ऑटोफिक्चर ओपन सोर्स और सब कुछ है, इसलिए आपका स्वागत है suggest this feature या पुल अनुरोध भेजें।

+1

आपके द्वारा वर्णित तर्क काफी मजबूत है। इससे मुझे और अधिक बोझिल होने के बारे में सोचने में मदद मिली - बिना किसी संपत्ति के नए गुण जोड़ना (या संपत्ति के नामों के लिए दो वस्तुओं को ट्रैक करना झूठी सकारात्मकताओं से बचने के लिए। इस पर मेरा ध्यान बदलने के लिए धन्यवाद! –

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