मैं TDD के बुनियादी सिद्धांतों से परिचित हूँ, किया जा रहा है:यूनिट परीक्षण के लिए सबसे अच्छा तरीका क्या है जब आपके पास डमी और वास्तविक कार्यान्वयन दोनों के साथ इंटरफेस है?
- लिखें परीक्षण, इन कोई कार्यान्वयन
- परीक्षण पास करने के लिए बुनियादी कार्यान्वयन लिखें की वजह से असफल हो जायेगी
- Refactor कोड
हालांकि, मैं थोड़ा उलझन में हूं जहां इंटरफेस और कार्यान्वयन फिट है। मैं अपने खाली समय में एक स्प्रिंग वेब एप्लिकेशन बना रहा हूं, और बंदूकें चमकने के बजाए, मैं समझना चाहता हूं कि मैं इंटरफेस/कार्यान्वयन का थोड़ा बेहतर परीक्षण कैसे कर सकता हूं, मैंने यह सरल उदाहरण कोड यहां बनाया है:
public class RunMe
{
public static void main(String[] args)
{
// Using a dummy service now, but would have a real implementation later (fetch from DB etc.)
UserService userService = new DummyUserService();
System.out.println(userService.getUserById(1));
}
}
interface UserService
{
public String getUserById(Integer id);
}
class DummyUserService implements UserService
{
@Override
public String getUserById(Integer id)
{
return "James";
}
}
मैं UserService
इंटरफेस बनाने के बाद, अंत में इस का एक वास्तविक कार्यान्वयन है कि एक डेटाबेस क्वेरी करेगा, हालांकि आदेश आवेदन बंद जमीन प्राप्त करने के लिए मैं एक DummyUserService
कार्यान्वयन प्रतिस्थापित कर दिया है कि अभी वापस आ जाएगी हो जाएगा अभी के लिए कुछ स्थिर डेटा।
प्रश्न: मैं उपर्युक्त के लिए एक परीक्षण रणनीति कैसे कार्यान्वित कर सकता हूं?
मैं एक परीक्षण वर्ग DummyUserServiceTest
और परीक्षण कि जब मैं getUserById()
फोन यह James
वापस आ जाएंगे, कहा जाता है बना सकते हैं, बहुत सरल लगता है, तो (?) समय की बर्बादी नहीं।
इसके बाद, मैं एक टेस्ट क्लास RealUserService
भी बना सकता हूं जो कि getUserById()
डेटाबेस से उपयोगकर्ता नाम लौटाएगा। यह वह हिस्सा है जो मुझे थोड़ा सा भ्रमित करता है, ऐसा करने में, क्या यह अनिवार्य रूप से यूनिट परीक्षण की सीमा को ओवरस्टेट नहीं करता है और एक इंटरग्रेशन टेस्ट (डीबी पर हिट के साथ) बन जाता है?
प्रश्न (सुधार, थोड़ा): डमी/स्टब किए गए इंटरफेस का उपयोग करते समय, और वास्तविक कार्यान्वयन, कौन से हिस्सों को यूनिट परीक्षण किया जाना चाहिए, और कौन से हिस्सों को सुरक्षित रूप से छोड़ा जा सकता है?
मैं कुछ घंटे बिताए कल रात इस विषय पर Googling, और ज्यादातर सलाह दे क्या वास्तव में परीक्षण किया जाना चाहिए के स्थानों में या तो ट्यूटोरियल TDD है क्या, या कैसे JUnit उपयोग करने के लिए के उदाहरण हैं, लेकिन कुछ नहीं मिला। हालांकि यह पूरी तरह से संभव नहीं है, कि मैंने काफी कठिन खोज नहीं की थी या सही चीज़ की तलाश नहीं की थी ...