2010-02-07 18 views
6

मेरे पास मेरे प्रोजेक्ट में कई जावा बीन्स हैं। मुझे उनके लिए एक जुनीट टेस्ट क्लास बनाने की जरूरत है। परीक्षण तरीकों की तरह 4.4 नज़र ग्रहण 3.2 & JUnit उपयोग करते हुए उत्पन्न निम्नलिखित:गेटर्स और सेटर्स के लिए जूनिट टेस्ट विधि

public void testGetName() { 
     // fail("Not yet implemented"); 
    } 

    @Test 
    public void testSetName() { 
     // fail("Not yet implemented"); 
    } 

    @Test 
    public void testGetEmployeeid() { 
     // fail("Not yet implemented"); 
    } 

    @Test 
    public void testSetEmployeeid() { 
     // fail("Not yet implemented"); 
    } 

मेरी सेम के कुछ है 100 से अधिक क्षेत्रों ...

वहाँ एक रास्ता है जिसके द्वारा मैं एक ही परीक्षण प्राप्त कर सकते हैं है गेटर्स & दोनों testEmployeeid(), testName() जैसे सेटर्स के लिए विधि ताकि इन तरीकों में मैं 2 diff का उपयोग करने के बजाय अपने सेटर्स & गेटर्स दोनों का परीक्षण कर सकूं। उनके लिए परीक्षण विधियां ...

मुझे ऐसा करने के लिए ग्रहण को कैसे कॉन्फ़िगर करना चाहिए?

+0

परीक्षण विधियों को उत्पन्न करने के लिए आप किस ग्रहण प्लग-इन का उपयोग कर रहे हैं? – Yoni

+0

FWIW, निम्न प्रश्न बहस को अलग करने की कोशिश करता है और पूछता है कि क्या आपकी प्राथमिकता के अनुसार स्वचालित रूप से ऐसा करने का कोई तरीका है - http://stackoverflow.com/questions/108692 –

+5

** असली ** समस्या पूरी तरह से असंबंधित है इकाई परीक्षण पूरी तरह से: "* मेरे कुछ बीन्स में 100 से अधिक फ़ील्ड हैं *" ... इस प्रश्न को पढ़ने वाले किसी भी जावा न्यूबीज के लिए, कृपया यह समझें * भयानक * प्रोग्रामिंग। किसी भी वर्ग जिसमें 100+ फ़ील्ड हैं, उसकी ज़िम्मेदारी बहुत अधिक है। [यह] देखें (http://stackoverflow.com/questions/4683841/what-is-object-decomposition) यदि आप समझ में नहीं आते हैं तो क्यों। – IAmYourFaja

उत्तर

25

टेस्ट ड्राइव डेवलपमेंट का दर्शन कहता है "सब कुछ जांचें जो संभवतः तोड़ सकता है"। यही है, केवल इसके लिए परीक्षण लिखने के बजाय उपयोगी परीक्षणों पर अपने प्रयासों पर ध्यान केंद्रित करें।

गेटर्स और सेटर्स लगभग हमेशा छोटे कोड होते हैं, जो स्वयं परीक्षण करके लायक नहीं होते हैं।

मुझे पता है कि यह आपकी याचिका का सीधा जवाब नहीं है, लेकिन मैंने सोचा कि यह अभी भी इसे इंगित करने में मदद कर सकता है ;-) तो आपको वास्तव में उन सभी गेटर्स और सेटर्स के लिए परीक्षण क्यों लिखने की आवश्यकता है?

+1

+1 मैं सहमत हूं कि एक्सेसर विधियों को परीक्षण की आवश्यकता नहीं है। मुझे एक सुविधा याद आ रही है जो उन्हें एनोटेशन द्वारा घोषित करने की अनुमति देगी। – stacker

+13

मैं दृढ़ता से असहमत हूं। आप * रिग्रेशन * उद्देश्यों के लिए सेटर्स और गेटर्स का परीक्षण करते हैं, जैसे कि जब आपके सेटर्स/गेटर्स अधिक जटिल होते हैं, तो परीक्षण पुष्टि करते हैं कि वे अभी भी पहले के रूप में कार्य करते हैं। –

+2

हाँ, अच्छा होगा। जावा अवसरों पर भी वर्बोज़ है। सी # यह एक बेहतर मिला। एनोटेशन आधारित दृष्टिकोण के लिए –

5

आप शायद अपाचे कॉमन्स 'beanutils' इस को स्वचालित मदद करने के लिए इस्तेमाल कर सकते हैं:

http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/PropertyUtils.html#getSimpleProperty%28java.lang.Object,java.lang.String%29

उदाहरण के लिए एक विधि describe(Object bean) जो सभी पठनीय विशेषताओं (यानी, टिककर खेल) का एक नक्शा वापस आ जाएगी है।

तो है कि नक्शे पुनरावृति और कॉल:

setSimpleProperty(Object bean, String name, Object value) 

और

public static Object getSimpleProperty(Object bean, String name) 

और हालांकि मैं ही टिककर खेल के अलावा अन्य पोस्टर से सहमत/setters बहुत तुच्छ कर रहे हैं - मुझे लगता है कि अभी भी उन्हें परीक्षण के लायक है - टाइपो को खत्म करने के लिए, संपत्ति परिवर्तन श्रोताओं आदि को परीक्षण करने के लिए

उदाहरण के लिए, यह गतिशील रूप से एक बीन के प्राप्तकर्ता निकालेगा:

import java.io.Serializable; 
import java.util.Set; 
import org.apache.commons.beanutils.PropertyUtils; 

public class MyTestBean implements Serializable { 
    private int a; 
    private int b; 
    private int c; 
    private String x; 
    private String y; 
    private String z; 

    public static void main(String[] args) throws Exception { 
    MyTestBean bean=new MyTestBean(); 
    Set prop=PropertyUtils.describe(bean).keySet(); 
    for (Object o : prop) { 
     System.out.println((String)o); 
    } 
    } 

    public int getA() { 
     return a; 
    } 
    public void setA(int a) { 
     this.a = a; 
    } 
    public int getB() { 
     return b; 
    } 
    public void setB(int b) { 
     this.b = b; 
    } 
    public int getC() { 
     return c; 
    } 
    public void setC(int c) { 
     this.c = c; 
    } 
    public String getX() { 
     return x; 
    } 
    public void setX(String x) { 
     this.x = x; 
    } 
    public String getY() { 
     return y; 
    } 
    public void setY(String y) { 
     this.y = y; 
    } 
    public String getZ() { 
     return z; 
    } 
    public void setZ(String z) { 
     this.z = z; 
    }} 

आपको इस कोड को चलाने के लिए अपने प्रोजेक्ट में बीनयूटिल और कॉमन्स लॉजिंग और दोनों पुस्तकालयों के जार डाउनलोड करने की आवश्यकता होगी।

11

यदि आपके पास कक्षा में 100 फ़ील्ड हैं (संबंधित सेटर्स/गेटर्स के साथ) मुझे संदेह है कि आपका ऑब्जेक्ट मॉडल सही ढंग से विघटित नहीं हुआ है। 100+ फ़ील्ड किसी ऑब्जेक्ट के लिए फ़ील्ड की असाधारण संख्या की तरह लगता है, और मुझे लगता है कि इसमें कई जिम्मेदारियां हैं जिन्हें कई और विशेष ऑब्जेक्ट्स में विभाजित किया जा सकता है।

+0

हालांकि यह अक्सर मामला होता है, लेकिन यह आवश्यक नहीं है कि वह कई फ़ील्ड हो। कल्पना कीजिए कि यह वर्ग उदाहरण के लिए, एक बहुत बड़ी एक्सएमएल फ़ाइल में एक जैक्सब मैपिंग प्रदान करने के लिए मौजूद है। – Steve

3

मुझे लगता है कि इस पुस्तकालय अपने प्रश्न का उत्तर है:() http://outsidemybox.github.com/testUtils/

यह सब में फली की प्रारंभिक मान, setters, टिककर खेल, hashCode (परीक्षण), के बराबर होती है और toString()। आपको बस डिफ़ॉल्ट और गैर डिफ़ॉल्ट संपत्ति/मान का नक्शा परिभाषित करना है।

यह अतिरिक्त गैर-डिफ़ॉल्ट रचनाकारों के साथ बीन्स वाली वस्तुओं का परीक्षण भी कर सकता है।

+0

बस भविष्य के संदर्भ के लिए। कॉपी और पेस्टिंग उत्तरों से और स्वयं को बढ़ावा देने से भी बचें। धन्यवाद। – Bobby

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