java - Reusing test implementations in JUnit 4? -


मेरे पास एक इंटरफ़ेस है, जैसे:

  सार्वजनिक इंटरफ़ेस थिंग {फ्रॉब रेसल्ट फ्रोब (फ्रोबइनपुट) ; }   

और उस अंतरफलक के कई कार्यान्वयन (जैसे सामान्य टाइपिंग , ImmutableThing , AsyncThing ) कि मैं हूं परीक्षण करने की कोशिश कर रहा है।

मेरे कई परीक्षण विधियां वास्तव में यह सुनिश्चित करने के लिए हैं कि इंटरफ़ेस सही ढंग से लागू किया गया है, और इस प्रकार प्रत्येक थिंग कार्यान्वयन में दोहराया गया है ज्यूनिट 3 में इसका एक आम समाधान एक आधार वर्ग (विस्तार TestCase ) होता है जिसे प्रत्येक कार्यान्वयन वर्ग द्वारा उप-क्लास किया जाता है। लेकिन क्या यह ज्युनिट 4 के लिए सही दृष्टिकोण है?

वरीयता के आरोही क्रम में (मेरा मानना ​​है) संभावित विकल्प:

  1. दोहराया टेस्ट पेस्ट करें तरीकों। बिल्कुल सूख नहीं है, लेकिन मुझे लगता है कि उत्पादन कोड में होने की तुलना में परीक्षणों में कम चिंता की बात होगी।

  2. विधियों के साथ एक अमूर्त वर्ग बनाएं, और प्रत्येक कार्यान्वयन टेस्ट क्लास के लिए इसे उप-वर्ग (आम तौर पर ज्यूनेट 3 परीक्षणों के साथ देखा गया है - क्या यह अभी भी एक अच्छा तरीका है कि यूजिट 4 में जाना है?)

  3. सामान्य परीक्षण विधियों को एक सहायक वर्ग में रखो, प्रत्येक कार्यान्वयन (विरासत के बजाय संरचना।)

    # 3 करने के लिए सबसे अच्छा अभ्यास क्या है? हो सकता है कि एक @RunWith (पैरामीइक्टेड.क्लास) परीक्षा प्रत्येक कार्यान्वयन के साथ पैरामीटर की जाती है? या यह पूरा करने का एक बेहतर तरीका है?

    हां, यह

    मैं इंटरफ़ेस के लिए सार होना बेस टेस्ट क्लास को पसंद करता हूं, अर्थात आपका बेस क्लास बनाएं, जो कि प्रत्येक कार्यान्वयन वर्ग द्वारा ज्यूनिट 4 में भी उपवर्ग है। "वैकल्पिक" 2, चूंकि मैंने परीक्षण कोड के लिए उत्पादन कोड से विरासत पदानुक्रम की नकल करने में अच्छा अनुभव किया है इसलिए यदि आपके पास I और कार्यान्वयन S1 , S2 और S3 इंटरफ़ेस है, तो आप अमूर्त टेस्ट क्लास TestI और परीक्षण कक्षाएं TestS1 , TestS2 और TestS3

    टेस्ट मामलों को बोलना चाहिए, यानी एक कहानी बताएं हमेशा की तरह - विधि नामों को ध्यान से चुनकर और केवल स्वच्छ व्यवहार उपप्रकार का उपयोग करके, विरासत इस का कोई आक्षेप नहीं करता है।

Comments

Popular posts from this blog

Python SQLAlchemy:AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema' -

java - How not to audit a join table and related entities using Hibernate Envers? -

mongodb - CakePHP paginator ignoring order, but only for certain values -