मैंने अन्य प्रश्नों को पढ़ा जो इस प्रश्न के समाधान के साथ आते हैं। हालांकि, परीक्षण के लिए सक्षम होने के लिए उनके समाधान में मेरे आवेदन में शामिल होने के लिए हैकी कोड की आवश्यकता होती है। मेरे लिए स्वच्छ कोड इकाई परीक्षण से अधिक महत्वपूर्ण है।उद्देश्य सी - यूनिट परीक्षण dispatch_async ब्लॉक?
मैं नियमित रूप से अपने ऐप में dispatch_async का उपयोग करता हूं, और मुझे समस्या परीक्षण करने में समस्या आ रही है। समस्या यह है कि मेरे परीक्षण के बाद ब्लॉक निष्पादित हो चुका है, क्योंकि यह मुख्य कतार पर असीमित रूप से चल रहा है। ब्लॉक को निष्पादित होने तक किसी भी तरह प्रतीक्षा करने का कोई तरीका है और फिर परीक्षण के साथ जारी रखें।
मैं ऐसा ही इकाई परीक्षण
- (viod)viewDidLoad
{
[super viewDidLoad];
// Test passes on this
[self.serviceClient fetchDataForUserId:self.userId];
// Test fails on this because it's asynchronous
dispatch_async(dispatch_get_main_queue(), ^{
[self.serviceClient fetchDataForUserId:self.userId];
});
}
- (void)testShouldFetchUserDataUsingCorrectId
{
static NSString *userId = @"sdfsdfsdfsdf";
self.viewController.userId = userId;
self.viewController.serviceClient = [[OCMockObject niceMockForClass:[ServiceClient class]];
[[(OCMockObject *)self.viewController.serviceClient expect] fetchDataForUserId:userId];
[self.viewController view];
[(OCMockObject *)self.viewController.serviceClient verify];
}
इस कोड का उपयोग करके, ब्लॉक को बिलकुल नहीं बुलाया जा रहा है, परीक्षण के बाद भी नहीं। – aryaxt
मैंने अपना जवाब संशोधित कर दिया है। मैंने इस दृष्टिकोण का अधिक अच्छी तरह से परीक्षण किया। –
धन्यवाद। यह विधि विश्वसनीय नहीं लगती है, लेकिन मुझे एक बेहतर समाधान नहीं मिला है, इसलिए मैं आगे बढ़ूंगा और उम्मीद करूँगा कि यह मेरे परीक्षणों को तोड़ नहीं देगा। – aryaxt