खोज…


टिप्पणियों

इसके फायदे भी हैं। ExternalResource सोर्सिंग का विस्तार करना सुविधाजनक है, खासकर अगर हमें केवल कुछ सेट करने के लिए before() आवश्यकता होती है।

हालाँकि, हमें इस बात की जानकारी होनी चाहिए कि, चूंकि before() पद्धति को try...finally बाहर निष्पादित किया गया है try...finally , किसी भी कोड को after() में साफ करने के लिए आवश्यक है after() दौरान कोई त्रुटि होने पर निष्पादित नहीं किया जाएगा। before() निष्पादन before()

इस तरह यह अंदर दिखता है ExternalResource :

before();
try {
    base.evaluate();
} finally {
    after();
}

जाहिर है, अगर किसी अपवाद को परीक्षण में, या किसी अन्य नेस्टेड नियम द्वारा फेंक दिया जाता है, तो उसके बाद भी निष्पादित किया जाएगा।

कस्टम @TestRule कार्यान्वयन द्वारा

यह विशेष रूप से उपयोगी है यदि हमारे पास एक वर्ग है जिसे हम नियम में विस्तारित करना चाहते हैं। अधिक सुविधाजनक विधि के लिए नीचे उदाहरण देखें।

import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;

public class AwesomeTestRule implements TextRule {
    
    @Override
    public Statement apply(Statement base, Description description) {
        return new AwesomeStatement(base);
    }

    private static class AwesomeStatement extends Statement {
        
        private Statement base;
        
        public AwesomeStatement(Statement base) {
            this.base = base;
        }

        @Override
        public void evaluate() throws Throwable {
            try {
                // do your magic
                base.evaluate(); // this will call Junit to run an individual test
            } finally {
                // undo the magic, if required
            }
        }
    }
    
}

कस्टम @TestRule एक्सटेंशन द्वारा

JUnit में @TestRule का अमूर्त कार्यान्वयन है जो आपको अधिक सरल तरीके से एक नियम लिखने देता है। इसे ExternalResource कहा जाता है और दो संरक्षित तरीके प्रदान करता है जिन्हें इस तरह बढ़ाया जा सकता है:

public class AwesomeTestRule extends ExternalResource {

    @Override
    protected void before() {
        // do your magic
    }

    @Override
    protected void after() {
        // undo your magic, if needed
    }

}



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow