2011-02-17 11 views
19

मैं कई सहयोगी कक्षाओं के लिए यूनिट परीक्षण लिखने के लिए EasyMock का उपयोग करने की प्रक्रिया में हूं। इन वर्गों में से एक (इसे Foo पर कॉल करें) रिमोट सर्वर और पार्स से नेटवर्क कनेक्शन खोलता है जो सर्वर के एक्सएमएल प्रतिक्रिया को बाकी वर्गों में उपयोग कर सकता है।अपवादों को फेंकने के लिए EasyMock नकली वस्तुओं को प्राप्त करना

वर्तमान में मेरे परीक्षण केवल उन परिदृश्यों को शामिल करते हैं जिनमें सब कुछ हंकी-डोरी है और रिमोट सर्वर ऊपर और चल रहा है और एक्सएमएल को अपेक्षित रूप से वापस कर रहा है। हालांकि, मैं खुश रहूंगा यदि मैं Foo पर नकल कर सकता हूं ताकि मैं अनुकरण कर सकूं कि रिमोट सर्वर डाउन होने पर क्या होता है, या ऐसी कोई अन्य समस्या है जो को Foo द्वारा फेंकने का कारण बनती है।

मैंने EasyMock API पर एक नज़र डाली है, और मैं कुछ भी नहीं देख सकता जो एक अपवाद को फेंकने के लिए एक मॉक पूछने की विधि जैसा दिखता है।

Exception आधारित परीक्षणों के लिए मेरे लिए बिल्कुल जरूरी नहीं है, लेकिन अगर मैं EasyMock के साथ यह संभव हो तो उत्सुक हूं, और मुझे लगता है कि इस तरह से Foo का सार्वजनिक अनुबंध परीक्षण करना उपयोगी होगा।

किसी ने भी इस तरह EasyMock के साथ ऐसा कुछ किया?

संदर्भ

उत्तर

27

documentation से:

को निर्दिष्ट अपवादों के लिए (अधिक वास्तव में: Throwable रों) फेंक दिया करने के लिए, वस्तु expectLastCall() से लौट आए और expect(T value) विधि 012 प्रदान करता है। मॉक ऑब्जेक्ट को कॉल करने के बाद विधि को रिकॉर्ड स्थिति में बुलाया जाना चाहिए जिसके लिए यह Throwable फेंकने के लिए निर्दिष्ट करता है।

अनियंत्रित अपवाद (कि, RuntimeException, Error और उनके सभी उपवर्गों है) हर विधि से फेंका जा सकता है। चेक अपवाद केवल उन्हीं तरीकों से फेंक दिया जा सकता है जो वास्तव में उन्हें फेंक देते हैं।

उदाहरण के लिए:

expectLastCall().andThrow(new HibernateException("Something terrible happened")); 

expect(query.list()).andThrow(
     new HibernateException("Something terrible happened")); 
+0

के लिए पूरी तरह से है कि याद किया। धन्यवाद। – Jon

+0

अगर किसी को यह उनके लिए काम नहीं कर रहा है ... सुनिश्चित करें कि आप EasyMock.replay –

4

आप आसान नकली में विधि andThrow(Throwable throwable) उपयोग कर सकते हैं। documentation देखें - शीर्षक अपवादों के साथ काम

उदाहरण

expect(mock.voteForRemoval("Document")) 
    .andThrow(new RuntimeException(), 4); 
+0

का उपयोग करते हैं, यह याद किया कि दस्तावेज के मेरे स्किप-पठन में। धन्यवाद। – Jon

संबंधित मुद्दे