2012-01-02 11 views
7

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

नियंत्रक एक सेवा है:

@Autowired 
UserService userService 

और मेरे उपयोगकर्ता सेवा पर निर्भर करता है (autowired) मेरी UserDao और MongoDB आदि जैसे कुछ अन्य सेवाओं

अब मैं व्यापार तर्क में परीक्षण किया जाना चाहता हूँ मेरा उपयोगकर्ता सेवा, लेकिन मैं अपने उपयोगकर्ताडाओ और मोंगोब आदि से प्रतिक्रियाओं का नकल करना चाहता हूं

मैं अपना यूनिट परीक्षण सही तरीके से कैसे सेटअप करूं?

क्या मैं वसंत कंटेनर की एक्सएमएल फ़ाइल का पुन: उपयोग कर सकता हूं जिसमें मेरे सभी बीन्स आदि हैं या क्या मैं एक नया बना सकता हूं? (मुझे लगता है कि मुझे यहां वसंत कंटेनर शामिल करना है)

इस पर कुछ मार्गदर्शन की तलाश में, किसी भी ट्यूटोरियल की सराहना की जाएगी।

@Controller 
public class UserController { 

    @Autowired 
    UserService userService; 
} 
:

अद्यतन

क्या मैं अजीब लगता है कि मेरी वसंत नियंत्रक (कि नियंत्रक से लागू नहीं करता है) के लिए मैं मैन्युअल रूप से मेरी सेवा, यानी सेट करने के लिए मेरे निजी varialbe पर पहुंच सकता था है

और मेरी इकाई परीक्षण में मैं कर सकता:

UserController controller = new UserController(); 
controller.userService = .... 

लेकिन मेरे UserService, जो है UserDao autowired के लिए, मैं नहीं पहुंच सकते उपयोगकर्तादाओ संपत्ति:

UserService userService = new UserServiceImpl(); 
userService.userDao = .... // not available 

यह समझ में आता है क्योंकि यह निजी है, लेकिन यह मेरे नियंत्रक के लिए कैसे काम कर रहा है?

+1

पुन: अद्यतन, नियंत्रक, सेवा, और परीक्षण कौन से पैकेज हैं? यदि परीक्षण एक ही पैकेज में है, तो यह डिफ़ॉल्ट-स्कोप्ड गुणों तक पहुंच सकता है। एक एक्सेस संशोधक को ओमेट करना * संपत्ति * निजी नहीं है, बल्कि [पैकेज-निजी] (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)। –

+0

मेरे पास एक ही पैकेज में है। आह मैं देखता हूं, मुझे लगता है कि यह निजी था। मैं सोच रहा था कि एक रिएक्टर के दौरान इंटेलिजे डिफ़ॉल्ट रूप से फ़ील्ड को निजी बनाता है। तो मुझे उन्हें पैकेज के रूप में निजी रखना चाहिए? – Blankman

+1

कोई "चाहिए" नहीं है, यह सिर्फ निर्भर करता है। पैकेज-प्राइवेट के साथ मेरी एकमात्र चिंता यह है कि आप अभी भी कुछ अनजाने में पहुंच सकते हैं; मैं चीजों को निजी रखने और सेटर्स का उपयोग करना पसंद करता हूं, लेकिन मेह। –

उत्तर

5

वसंत ढांचे में परीक्षण के लिए बहुत ही रोचक विशेषताएं हैं। आप Spring reference guide पर एक नज़र डाल सकते हैं। यह आपके जुनीट टेस्ट क्लास में भी DI प्रदान कर सकता है।

@RunWith(SpringJUnit4ClassRunner.class) 
// ApplicationContext will be loaded from "/applicationContext.xml" and "/applicationContext-test.xml" 
// in the root of the classpath 
@ContextConfiguration(locations={"/applicationContext.xml", "/applicationContext-test.xml"}) 
public class MyTest { 
    // class body... 
} 

संक्षेप में, आप अपने खुद के applicationContext.xml उपयोग कर सकते हैं या बस के परीक्षण के लिए एक नया एक परिभाषित करते हैं। परीक्षण प्रयोजनों के लिए समर्पित एक और डेटा स्रोत को परिभाषित करने के बाद से मैं व्यक्तिगत रूप से एक अलग उपयोग करता हूं।

4

क्या मैं अजीब लगता है कि मेरी वसंत नियंत्रक (कि नियंत्रक से लागू नहीं करता है) के लिए मैं मैन्युअल रूप से मेरी सेवा, यानी सेट करने के लिए मेरे निजी varialbe पर पहुंच सकता था है:

यह आसान है : निजी में विविध नहीं।

इसमें डिफ़ॉल्ट दृश्यता ("पैकेज निजी") है। इसका मतलब है कि आप उन्हें उसी पैकेज के सभी वर्गों से एक्सेस कर सकते हैं।

तो यदि आपके पास एक सामान्य संरचना है, तो नियंत्रक और नियंत्रक परीक्षण केस एक ही पैकेज में हैं। इसलिए आप ("पैकेज निजी") नियंत्रक फ़ील्ड को संशोधित कर सकते हैं। लेकिन नियंत्रक परीक्षण केस और सेवा एक ही पैकेज में नहीं है, इसलिए आप ("पैकेज निजी") सेवा फ़ील्ड तक नहीं पहुंच सकते हैं।

1

मैं फिर से उपयोग कर सकते हैं आदि अपने सभी सेम है कि वसंत कंटेनर की xml फ़ाइल या मैं एक नया बना सकता हूँ? (मुझे लगता है कि मुझे वसंत कंटेनर शामिल है)

मैं नई एक्सएमएल फ़ाइल बनाने के खिलाफ सलाह दूंगा। आप बहुत सारी चीजों को डुप्लिकेट कर देंगे और इसे बनाए रखने के लिए कठिन होगा। कॉन्फ़िगरेशन फ़ाइलों का प्रसार होगा। आप कॉन्फ़िगरेशन को एक अलग एक्सएमएल में परीक्षण के लिए आवश्यक रखते हैं और इसे आपके उत्पादन बॉक्स में भी तैनात नहीं किया जाना चाहिए। अब तक अपने सेम के लिए कॉन्फ़िगरेशन का उपयोग करने के रूप में, आप @Trein द्वारा सुझाए गए तंत्र को नियोजित कर सकते हैं।

सामान्य रूप से वसंत contrller परीक्षण के लिए, आप यह SO Thread उपयोगी भी पा सकते हैं।

उम्मीद है कि मदद करता है।

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