आप पहले उत्तरदाता इकाई परीक्षण कैसे लिखते हैं?आईओएस यूनिट टेस्ट: कैसे सेट/अपडेट/पहली बार जांचें?
मैं यह पुष्टि करने के लिए एक परीक्षण लिखने की कोशिश कर रहा हूं कि एक विधि अगली पाठ फ़ील्ड पर ध्यान केंद्रित करे। controller
UIViewController
का वंशज है। लेकिन इस खोजपूर्ण परीक्षण विफल रहता है:
- (void)testFirstResponder
{
[controller view];
[[controller firstTextField] becomeFirstResponder];
STAssertTrue([[controller firstTextField] isFirstResponder], nil);
}
पहली पंक्ति का कारण बनता है दृश्य लोड करने के लिए इतना है कि अपनी दुकानों स्थान पर हैं। टेक्स्ट फ़ील्ड गैर-शून्य हैं। लेकिन परीक्षण कभी नहीं गुजरता है।
मुझे लगता है कि becomeFirstResponder
पहले उत्तरदाता को तुरंत सेट नहीं करता है, लेकिन बाद में इसे शेड्यूल करता है। तो क्या इसके खिलाफ यूनिट परीक्षण लिखने का एक अच्छा तरीका है?
अप स्वीकार किए जाते हैं जवाब में टिप्पणी से जवाब पुलिंग ... बातें करते हैं थोड़े समय के लिए चलाएँ:
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];
अच्छा विचार, लेकिन यूनिट परीक्षण के लिए, इवेंट कतार पर एक संदेश डालने से काम नहीं होता है क्योंकि परीक्षण समाप्त होता है और दावा से पहले स्थिरता टूट जाती है। Counterexample: 'STAssertTrue' को 'STAssertFalse' में बदलना कोई फर्क नहीं पड़ता। –
ठीक है, यह काम नहीं करेगा ... एक और संकेत के रूप में, मुझे पता चला है कि आप स्थिति का परीक्षण करने से पहले रन लूप के लिए कुछ समय तक दौड़ सकते हैं: '[[NSRunLoop currentRunLoop] runUntilDate: fiveSecondsFromNow];' (से: http://stackoverflow.com/questions/1077737/ocunit-test-for-protocols-callbacks-delegate-in-objective-c)। मुझे पूरी तरह से यकीन नहीं है कि यह समाधान वास्तव में "सुरुचिपूर्ण" है, लेकिन इसे काम करना चाहिए और "छोटे" मामलों के लिए उपयुक्त हो सकता है (जब आपको वास्तव में फ्रैंक के साथ जाने की आवश्यकता नहीं है) ... – sergio
बढ़िया! शून्य का रन टाइम निर्दिष्ट करने से भी चाल चलती है। इस तरह के एक अद्भुत ढांचे के लिए –