उत्तर अब आपके सूट के भीतर @ClassRule
बनाने के लिए है। नियम पहले या बाद में लागू किया जाएगा (इस पर निर्भर करता है कि आप इसे कैसे कार्यान्वित करते हैं) प्रत्येक टेस्ट क्लास चलाया जाता है। कुछ अलग-अलग आधार वर्ग हैं जिन्हें आप विस्तार/कार्यान्वित कर सकते हैं। कक्षा नियमों के बारे में अच्छा क्या है कि यदि आप उन्हें अज्ञात कक्षाओं के रूप में लागू नहीं करते हैं तो आप कोड का पुन: उपयोग कर सकते हैं! http://java.dzone.com/articles/junit-49-class-and-suite-level-rules
यहाँ उनके उपयोग को वर्णन करने के कुछ नमूना कोड है:
यहाँ उनके बारे में एक लेख है। हां, यह मामूली है, लेकिन इसे शुरू करने के लिए आपके जीवन चक्र को अच्छी तरह से स्पष्ट करना चाहिए।
पहले सूट परिभाषा:
import org.junit.*;
import org.junit.rules.ExternalResource;
import org.junit.runners.Suite;
import org.junit.runner.RunWith;
@RunWith(Suite.class)
@Suite.SuiteClasses({
RuleTest.class,
})
public class RuleSuite{
private static int bCount = 0;
private static int aCount = 0;
@ClassRule
public static ExternalResource testRule = new ExternalResource(){
@Override
protected void before() throws Throwable{
System.err.println("before test class: " + ++bCount);
sss = "asdf";
};
@Override
protected void after(){
System.err.println("after test class: " + ++aCount);
};
};
public static String sss;
}
और अब परीक्षण वर्ग परिभाषा:
import static org.junit.Assert.*;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExternalResource;
public class RuleTest {
@Test
public void asdf1(){
assertNotNull("A value should've been set by a rule.", RuleSuite.sss);
}
@Test
public void asdf2(){
assertEquals("This value should be set by the rule.", "asdf", RuleSuite.sss);
}
}
BeforeSuite और AfterSuite क्यों काम नहीं करता है? – guerda