पुन: प्रयोज्य कोड लिखने के लिए जुनीट तरीका (इसके द्वारा विरासत के बजाय) नियम हैं।
देखें https://github.com/junit-team/junit/wiki/Rules
यहाँ एक गूंगा नमूना है, लेकिन आप बिंदु मिल जाएगा।
import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;
import org.junit.runner.Description;
public class MyTestRule implements TestRule {
@Override
public Statement apply(final Statement statement, Description description) {
return new Statement() {
public void evaluate() throws Throwable {
// Here is BEFORE_CODE
try {
statement.evaluate();
} finally {
// Here is AFTER_CODE
}
}
};
}
}
फिर आप इस तरह अपने TestRule उपयोग कर सकते हैं:
import org.junit.Rule;
public class MyTest {
@Rule
public MyTestRule myRule = new MyTestRule();
}
BEFORE_CODE और AFTER_CODE तो अपने परीक्षण तरीकों में से प्रत्येक के आसपास निष्पादित किया जाएगा।
आप कक्षा प्रति केवल एक बार अपने कोड को चलाने के लिए एक @ClassRule के रूप में अपने TestRule का उपयोग की जरूरत है:
import org.junit.ClassRule;
public class MyTest {
@ClassRule
public static MyTestRule myRule = new MyTestRule();
}
अब, BEFORE_CODE
और AFTER_CODE
अपने परीक्षण के वर्ग की प्रत्येक चारों ओर निष्पादित किया जाएगा।
@Rule फ़ील्ड स्थिर नहीं है, @ClassRule फ़ील्ड है।
ए @ क्लासरूले को सूट में भी घोषित किया जा सकता है।
ध्यान दें कि आप एक एकल परीक्षा कक्षा में कई नियम घोषित कर सकते हैं, इस प्रकार आप टेस्ट-सूट, टेस्ट-क्लासेस और टेस्ट-विधियों के स्तर पर परीक्षण जीवन चक्र लिखते हैं।
एक नियम एक वस्तु है जिसे आप अपने परीक्षण वर्गों (स्थिर या नहीं) में instanciate है। यदि आवश्यक हो तो आप नियंत्रक पैरामीटर जोड़ सकते हैं।
एचटीएच
क्या सभी '@ पहले क्लास' बिल्कुल समान हैं या क्या वे कुछ कोड साझा करते हैं? –
विरासत एक गंदे तरीके क्यों है? –
@lu, विधि स्थैतिक है, और विरासत सबसे अच्छी बात नहीं होगी। –