ios XCTestCase के सेटअप विधि का उद्देश्य क्या है?




ios7 (2)

यहां चर्चा के लिए कुछ बिंदु हैं: setUp विधियों का व्यवहार, और सामान्य सर्वोत्तम परीक्षण अभ्यास।

वास्तव में दो setUp विधियां हैं:

+ (void)setUp;
- (void)setUp;

पूरे परीक्षण के दौरान कक्षा विधि ( + (void)setUp ) केवल एक बार चलाई जाती है।

उदाहरण विधि ( - (void)setUp ) डिफ़ॉल्ट टेम्पलेट में से एक है; यह हर एक परीक्षण से पहले चलाया जाता है। उम्मीद है, Xcode के एक काल्पनिक भविष्य के संस्करण में, इस टिप्पणी को बदल दिया गया होगा // Put setup code here. This method is called before the invocation of each test method in the class. // Put setup code here. This method is called before the invocation of each test method in the class. आँख झपकना

तो इन दो विधियों के माध्यम से, आपके द्वारा वर्णित दोनों व्यवहार संभव हैं।

आपकी टिप्पणी के बारे में:

"निश्चित रूप से डेवलपर्स इसमें और अधिक से अधिक वस्तुओं का निर्माण नहीं कर रहे हैं?"

मेरा जवाब होगा "हां, वे आमतौर पर हैं"। 'अच्छा' इकाई परीक्षणों के लिए एक लोकप्रिय से संबंधित एफआईआरएसटी है:

  • उपवास
  • पृथक
  • repeatable
  • स्व सत्यापन
  • समयोचित

पृथक इस चर्चा के लिए महत्वपूर्ण है: आपके परीक्षणों को अन्य परीक्षणों द्वारा पीछे छोड़ी गई किसी भी पिछली स्थिति पर भरोसा नहीं करना चाहिए। आदर्श रूप से, आपको हर परीक्षण के लिए अपने इन-मेमोरी कोर डेटा स्टैक को फाड़ना और फिर से बनाना चाहिए, ताकि आप जान सकें कि आप एक साफ स्लेट से शुरू कर रहे हैं। एक अच्छा उदाहरण ग्राहम ली की इस पोस्ट में है । आप इन-मेमोरी स्टैक का उपयोग करना चाहते हैं क्योंकि a) आप इसे आसानी से फेंक सकते हैं, और b) यह बहुत तेज़ होना चाहिए क्योंकि यह सिर्फ-इन-मेमोरी है और आपकी डिस्क को नहीं मार रहा है।

यदि आप पाते हैं कि इसके परिणाम के रूप में आपके परीक्षण धीरे-धीरे चल रहे हैं (समय से पहले अनुकूलन न करें), तो मुझे लगता है कि एक उचित अगला कदम आपके + (void)setUp विधि में स्टैक बनाना होगा, लेकिन एक नया संदर्भ बनाएं हर बार आपके - (void)setUp विधि में।

XCTestCase बारे में XCTestCase के लिए डिफ़ॉल्ट टेम्पलेट के भीतर टिप्पणी के अनुसार:

Put setup code here; it will be run once, before the first test case.

हालाँकि, XCTestCase.h , setUp ऊपर की टिप्पणी अलग तरह से बताई गई है:

Setup method called before the invocation of each test method in the class.

वास्तविक व्यवहार की पुष्टि करने के लिए, मैंने यह सेट करने के लिए एक NSLog रखा कि यह कितनी बार कहा जाता है:

static int count = 0;

- (void)setUp
{
    [super setUp];
    count++;

    NSLog(@"Call Count = %d", count);
}

इसके परिणामस्वरूप setUp विधि को प्रत्येक परीक्षण विधि से पहले बुलाया जा रहा था ( XCTestCase.h पर टिप्पणी की पुष्टि)।

मैं एक बार टेस्ट / मॉक ऑब्जेक्ट बनाने के लिए setUp विधि का उपयोग करना चाहता था (जैसे कोर डेटा टेस्ट स्टैक सेटअप करने के लिए)। इनको बार-बार बनाने से प्रोसेसर गहन और संभावित रूप से बहुत धीमा होगा।

इसलिए,

1) setUp वास्तव में किसके लिए इस्तेमाल किया जाना है? निश्चित रूप से डेवलपर्स इसमें और अधिक से अधिक वस्तुओं का निर्माण नहीं कर रहे हैं?

2) मैं XCTestCase भीतर केवल एक बार इन वस्तुओं को कैसे बना सकता हूं?


मैं लगभग एक ही समस्या के साथ यहां आया था: बस एक बार और स्विफ्ट में setUp कैसे करें। यहाँ समाधान है:

override class func setUp() {
    super.setUp()    
    // ...
}

override class func tearDown() {    
    // ...
    super.tearDown()
}

अभी मैं अभी भी एक अतुल्यकालिक setUp लिए एक समाधान के लिए देख रहा हूँ!





xctest