की सुविधा के लिए यहां इकाई परीक्षण के लिए मेरे आवश्यकताएँ हैं:इकाई परीक्षण - लागू करने बराबरी केवल परीक्षण
- मैं इकाई मेरी उत्पादन कक्षाओं परीक्षण करना चाहते हैं
- मैं परीक्षण कोड और उत्पादन कोड के अलावा इस तरह के अलग करने के लिए चाहते हैं कि मैं केवल उत्पादन कोड जारी कर सकता हूं
यह उचित आवश्यकताओं की तरह लगता है। हालांकि, एक समस्या हमेशा उत्पन्न होती है जब मुझे ऑब्जेक्ट्स पर assertEquals
जैसी विधियों का उपयोग करने की आवश्यकता होती है क्योंकि इन्हें equals
विधि ओवरराइड किया जाता है। equals
विधि उत्पादन वर्ग में लागू किया जाना चाहिए, लेकिन वास्तव में केवल परीक्षण के लिए उपयोग किया जाता है। यह अच्छा होता है जब अच्छे कोडिंग प्रथाओं का निर्देश है कि equals
ओवरराइड हो गया है, तो hashCode
भी कार्यान्वित किया जाना चाहिए जिसके परिणामस्वरूप उत्पादन कक्षाओं को और भी अप्रयुक्त उत्पादन कोड हो सकता है।
यहाँ एक User
मॉडल के साथ एक सरल उदाहरण है (इंटेलीजे equals
और hashCode
autoimplemented)
public class User
{
public long id;
public long companyId;
public String name;
public String email;
public long version;
@Override
public boolean equals(Object o)
{
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if(companyId != user.companyId) return false;
if(id != user.id) return false;
if(version != user.version) return false;
if(!email.equals(user.email)) return false;
if(!name.equals(user.name)) return false;
return true;
}
@Override
public int hashCode()
{
int result = (int) (id^(id >>> 32));
result = 31 * result + (int) (companyId^(companyId >>> 32));
result = 31 * result + name.hashCode();
result = 31 * result + email.hashCode();
result = 31 * result + (int) (version^(version >>> 32));
return result;
}
}
यह देखा जा सकता है, equals
और hashCode
अंतरिक्ष और clutters वर्ग का एक बहुत लेता है।
समस्या का एक समाधान कक्षा, UserTester
बनाने के लिए हो सकता है, जिसमें assertUserEquals
विधि हो सकती है जिसका उपयोग उदाहरण के बजाय किया जा सकता है। जुनीट का assertEquals
।
एक और समाधान UserComparator
बनाने के लिए हो सकता है। हालांकि, ऐसा लगता है कि जुनीट के पास assertEquals
है जो Comparator
लेता है।
इस बिंदु पर सर्वोत्तम अभ्यास क्या है?
बस अपनी दस्तावेज़ीकरण की जाँच की। ऐसा लगता है कि आपको 'assertEquals' के बजाय 'assertReflectionEquals' का उपयोग करना चाहिए। ऐसा लगता है कि वें मेरी समस्या का समाधान है। – foens
मेरे बुरा, – Jk1
Ehh देख के लिए धन्यवाद - बस एक छोटी सी समस्या है जो मुझे मेरे सवाल में प्रस्तुत नहीं किया है पाया। मॉकिंग के लिए [mockito] (https://code.google.com/p/mockito/) जैसे ढांचे का उपयोग करने के बारे में क्या? 'सत्यापन (userDeleter) .delete (उपयोगकर्ता)' जैसी विधियों का उपयोग करते समय, यह तर्कों का परीक्षण करने के लिए 'बराबर' का भी उपयोग करता है। क्या आप उस समस्या का कोई समाधान जानते हैं? – foens