इकाई परीक्षण के दौरान आपको डेटाबेस के साथ परीक्षण की उम्मीद नहीं है, या कम से कम, उस डेटाबेस के साथ नहीं जो आपने इकाई परीक्षण के लिए तैयार नहीं किया है। डेटाबेस के साथ परीक्षण, और इस तरह, एक ही समय में आपके आवेदन की विभिन्न परतों का परीक्षण आमतौर पर एकीकरण परीक्षणों के रूप में देखा जाता है । इकाई परीक्षणों के साथ आपको केवल यह परखना चाहिए कि आपकी विधि क्या करती है, विभिन्न मापदंडों के आधार पर यह क्या लौटाती है, और कब (या नहीं) यह विफल होना चाहिए।
यह बहुत उम्मीद की जाती है कि आप अपने तरीके में अन्य वर्गों से एक्स विधियों के लिए कॉल करें । आप इन X विधियों का परीक्षण नहीं कर रहे हैं, इसलिए आपको इन विधियों का मजाक बनाना है ।
मुझे लगता है कि आप जावा में अपना कोड लिख रहे हैं, उस स्थिति में आपके पास मॉकिटो जैसे शानदार मॉकिंग फ्रेमवर्क हैं जो आपके लिए उपयोगी हो सकते हैं। आप मॉकिंग फ्रेमवर्क का उपयोग करते हैं या नहीं, यह आपकी पसंद है, मैं सिर्फ इतना कहूंगा कि वे आपका बहुत समय बचाएंगे और मैंने जो उल्लेख किया है वह वास्तव में जटिल नहीं है।
यदि आप प्रयोग करने के लिए अपना स्वयं का मॉक लिखना चाहते हैं, तो मान लें कि आपके पास निम्न CustomerRepository
वर्ग है:
public class CustomerRepository {
public CustomerDTO getCustomer(int id) {
...
}
}
आप CustomerRepository
निम्न तरीके से अपने स्वयं के नकली और गंदे वर्ग को लिख सकते हैं :
public class MockedCustomerRepository extends CustomerRepository {
public boolean bThrowDatabaseException;
public boolean bReturnNull;
public boolean bReturnCustomerWrongId;
public boolean bReturnCustomerWithId;
public CustomerDTO getCustomer(int id) {
if(bThrowDatabaseException) {
throw new DatabaseException("xxx");
} else if(bReturnNull) {
return null;
} else if(bReturnCustomerWrongId) {
throw new CustomerNotExistException(id);
} else if(bReturnCustomerWithId) {
return new CustomerDTO(id);
}
}
}
फिर, अपने परीक्षण के मामले में आप मूल रूप से अपने "मानक" उदाहरण को CustomerRepository
एक नकली उदाहरण से बदलते हैं जो आपको विभिन्न परिणामों के लिए अपनी पद्धति का परीक्षण करने की अनुमति देगा getCustomer
:
public class CustomerRestTest {
public void testGetCustomer_databaseFailure() {
MockedCustomerRepository dto = new MockedCustomerRepository();
dto.bThrowDataBaseException = true;
yRestClass rest = new MyRestClass();
rest.dto = dto;
rest.getCustomer(0);
// depending on what you do in your getCustomer method, you should check if you catched the exception, or let it pass, etc.. Make your assertions here
public void testGetCustomer_customerNotExist() {
// etc.
}
}
आम तौर पर, प्रत्येक परीक्षण विधि को केवल एक चीज का परीक्षण करना चाहिए, इससे आपके परीक्षणों को छोटा रखने और एक कार्य पर ध्यान केंद्रित करने में मदद मिलती है।
मैं इसे दोहराने जा रहा हूँ :-) एक पूरी तरह से नकली वर्ग लिखने में आपको कुछ समय लगता है। मॉकिंग फ्रेमवर्क का उपयोग करने पर विचार करें, कम एक कोड लिखता है, कम त्रुटि एक बनाता है , है ना? एक विधि का उपयोग करना जो एक अपवाद को फेंकता है, या किसी दिए गए पैरामीटर के लिए दिए गए मान को लौटाता है, केक का एक टुकड़ा है और कम से कम 2 या 3 लाइन लेता है (मॉकिटो के साथ)
आशा है कि आपके REST विधि का परीक्षण करने में मदद करता है।