एक खेल के लिए मैं विकसित कर रहा हूं, मेरे पास कई मॉडल वर्ग हैं जो उनके राज्य में बदलाव करते समय अधिसूचनाएं ट्रिगर करते हैं। फिर, दृश्य उन अधिसूचनाओं की सदस्यता लेता है और उन पर प्रतिक्रिया कर सकता है।OCUnit परीक्षण NSNotification वितरण
मैं ओसीयूनीट के साथ मॉडल के लिए अपने यूनिट परीक्षण कर रहा हूं, और यह कहना चाहता हूं कि अपेक्षित नोटिफिकेशन पोस्ट किए गए थे। कि के लिए, मैं कुछ इस तरह कर रहा हूँ:
- (void)testSomething {
[[NSNotificationCenter defaultCenter] addObserver:notifications selector:@selector(addObject:) name:kNotificationMoved object:board];
Board *board = [[Board alloc] init];
Tile *tile = [Tile newTile];
[board addTile:tile];
[board move:tile];
STAssertEquals((NSUInteger)1, [notifications count], nil);
// Assert the contents of the userInfo as well here
[board release];
}
विचार है कि NSNotificationCenter
अपने addObject:
विधि को फोन करके NSMutableArray
को सूचनाएं जोड़ देगा है।
जब मैं इसे चलाता हूं, हालांकि, मुझे लगता है कि addObject:
किसी अन्य ऑब्जेक्ट (मेरे NSMutableArray
पर) को भेजा जा रहा है जिससे ओसीयूनीट काम करना बंद कर देता है। हालांकि, अगर मैं कुछ कोड (जैसे release
कॉल, या एक नया यूनिट परीक्षण जोड़ता हूं) टिप्पणी करता हूं तो सब कुछ अपेक्षित काम करना शुरू कर देता है।
मुझे लगता है कि इसे एक समय के मुद्दे के साथ, या NSNotificationCenter
किसी भी तरह से रन लूप पर निर्भर होना है।
क्या इसका परीक्षण करने की कोई सिफारिश है? मुझे पता है कि मैं Board
में एक सेटर जोड़ सकता हूं और अपना खुद का NSNotificationCenter
इंजेक्ट कर सकता हूं, लेकिन मैं इसे करने का एक तेज़ तरीका ढूंढ रहा हूं (शायद NSNotificationCenter
गतिशील रूप से प्रतिस्थापित करने के तरीके पर कुछ चाल)।
+1 यूनिट परीक्षण अधिसूचनाओं के चालाक तरीके से +1! –