कारण सरल है, TestRule
MethodRule
को प्रतिस्थापित करने की योजना बनाई गई थी। MethodRule
4.7 में लागू पेश किया गया था, और यह एक विधि के साथ एक अंतरफलक है:
Statement apply(Statement base, FrameworkMethod method, Object target)
FrameworkMethod
(लगभग) एक आंतरिक JUnit वर्ग है, जो पहली जगह में उजागर नहीं किया जाना चाहिए है। object
वह ऑब्जेक्ट है जिस पर विधि चलयी जाएगी, उदाहरण के लिए, आप प्रतिबिंब का उपयोग करके परीक्षण की स्थिति को संशोधित कर सकते हैं।
TestRule
4.9 में पेश किया गया था, हालांकि, यह है:
Statement apply(Statement base, Description description)
Description
एक अपरिवर्तनीय परीक्षण का विवरण युक्त POJO है। एक परीक्षण के भीतर राज्य को संशोधित करने का तरीका TestRule
का उपयोग कर परीक्षण में सही ढंग से encapsulate है। यह एक पूरी तरह से क्लीनर डिजाइन है।
TestWatchman(MethodRule)
और TestWatcher(TestRule)
के बीच विशिष्ट अंतर न्यूनतम है, सिवाय इसके कि TestWatcher में बेहतर त्रुटि हैंडलिंग है, इसलिए इसे वरीयता में उपयोग किया जाना चाहिए। दोनों में succeeded()
, failed()
, starting()
, finished()
जैसे अतिव्यापी तरीके हैं।
public static class WatchmanTest {
private static String watchedLog;
@Rule
public TestWatcher watchman= new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
watchedLog+= description + "\n";
}
@Override
protected void succeeded(Description description) {
watchedLog+= description + " " + "success!\n";
}
};
@Test
public void fails() {
fail();
}
@Test
public void succeeds() {
}
}
TestWatcher(TestRule)
अतिरंजित तरीकों में अपवादों को संभालता है। यदि अपवाद फेंक दिए जाते हैं, तो परीक्षण विधि निष्पादन के बाद, विफल होने के बाद विफल हो जाती है।
अधिक जानकारी के लिए JUnit के संस्करण 4.11 के लिए रिलीज नोट्स के अनुसार TestWatcher और TestWatchman
देखें: "। MethodRule नहीं रह गया है अब मान्य नहीं है" Https://github.com/KentBeck/junit/blob/master/doc/ReleaseNotes4.11.md – sversch