मैं यहाँ मान्यताओं की एक जोड़ी बना रही हूँ, इसलिए यदि मैं आधार हूँ, मुझे पता है।
1) आप वस्तुओं जो दुकानों से कनेक्ट कर दिया जाएगा की एक सूची है, और उन दुकानों की एक सूची है। (उदाहरण के लिए, फ़ाइल के मालिक एक MyViewController
वर्ग है और दुकानों view
, label
, button
, और इतने पर है, वहाँ दुकानों delegate
के साथ एक UITableView
, और dataSource
, आदि)
2) आपका महत्वपूर्ण व्यक्ति यह व्यावहारिक बनाने के लिए तैयार कर रहे हैं 1. उदाहरण के लिए में वस्तुओं के सभी को खोजने के लिए, अगर कुछ UIControl
एक शीर्ष स्तर वस्तु या किसी प्रॉक्सी वस्तु द्वारा संदर्भित नहीं है, यह आसान viewWithTag:
मान लिया जाये साथ खोजने के लिए के लिए कोई टैग मूल्य दिया गया है ये सच हैं, तो आप परीक्षण कर सकते हैं कि निब मूल रूप से निम्नलिखित (छद्म कोड में) द्वारा लोड किया जाता है
for each referencingObject in nibObjects
{
for each outletName in referencingObject.outletNames
{
assertExistence(/* is an object referenced by this outlet? */)
assertProperties(/* does the object conform to the properties expected for this referencing object/outlet pairing? */)
}
}
मैं इस के एक कार्यान्वयन पर एक वार करना शुरू कर दिया। चूंकि आईओएस एनआईबी कुंजी-मूल्य कोडिंग पर भारी आधारित हैं, इसलिए मुझे लगता है कि इसके मूल्य के लिए निब परीक्षण करने में बहुत सारी संभावनाएं तलाशने की संभावना है। मैं नीब में ऑब्जेक्ट्स से भेजे गए कार्यों को संभालने में नहीं आया क्योंकि मुझे एसओ और अध्ययन करना है, लेकिन मैं अब तक जो कुछ भी करता हूं, वह साझा करूंगा।
ViewController *vc = [[ViewController alloc] init];
UINib *nib1 = [UINib nibWithNibName:@"ViewController1" bundle:nil];
NSArray *topLevelObjects = [nib1 instantiateWithOwner:vc options:nil];
ReferencingObject *filesOwnerReferencingObject = [[ReferencingObject alloc] init];
filesOwnerReferencingObject.object = vc;
//Make a referenced object outlet for the view
ReferencedOutlet *viewOutlet = [[ReferencedOutlet alloc] init];
viewOutlet.name = @"view";
viewOutlet.propertyAssertionBlock = ^(id object) {
UIView *theView = (UIView *)object;
STAssertEquals(1.0f, theView.alpha, @"shouldn't have any transparency");
};
//Make a referenced object outlet for the label
ReferencedOutlet *labelOutlet = [[ReferencedOutlet alloc] init];
labelOutlet.name = @"label";
labelOutlet.propertyAssertionBlock = ^(id object) {
UILabel *theLabel = (UILabel *)object;
NSString *expectedLabelText = @"ViewController1.xib";
STAssertTrue([expectedLabelText isEqualToString:theLabel.text], nil);
};
filesOwnerReferencingObject.outlets = @[ viewOutlet, labelOutlet ];
NSArray *referencingObjects = @[ filesOwnerReferencingObject ];
for (ReferencingObject *referencingObject in referencingObjects)
{
for (ReferencedOutlet *outlet in referencingObject.outlets)
{
id object = [filesOwnerReferencingObject.object valueForKey:outlet.name];
STAssertNotNil(object, nil);
outlet.propertyAssertionBlock(object);
}
}
और यहाँ मेरी इंटरफ़ेस/ReferencingObject
और ReferencedOutlet
वर्गों में से दिया गया है:
यहाँ परीक्षा पद्धति कोड मैं अपने SenTestCase
उपवर्ग में लिखा है।
@interface ReferencingObject : NSObject
@property (nonatomic, strong) id object;
@property (nonatomic, strong) NSArray *outlets;
@end
@implementation ReferencingObject
@end
typedef void (^ReferencedOutletPropertyAssertionBlock)(id);
@interface ReferencedOutlet : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) ReferencedOutletPropertyAssertionBlock propertyAssertionBlock;
@end
@implementation ReferencedOutlet
@end
उम्मीद है कि यह उत्तर आपको या किसी और की मदद करेगा। अगर आपका कोई प्रश्न हैं, तो मुझे से पूछें।
"दुकानों संदर्भित" वस्तु है कि वे संदर्भ पर Xcode द्वारा सूचीबद्ध हैं। यदि आपके पास यह निर्धारित करने के इरादे से टेक्स्ट व्यू है कि इसे किसी निश्चित आउटलेट द्वारा संदर्भित किया गया है, तो आप पहले ही जानते हैं कि टेक्स्ट व्यू मौजूद है। –
@ पीटर होसे मान लें कि मेरे पास 3 बटन हैं। मैं जांचना चाहता हूं कि लॉगिन, रजिस्टर और सहायता के लिए बटन हैं या नहीं। UIButton के अस्तित्व की जांच करना सहायक नहीं है। मैं तर्क दूंगा कि जांच कर रहे हैं कि 3 बटन भी बेकार हैं। मैं क्या करना चाहता हूं यह जांचें कि क्या मौजूदा बटन हैं जो लॉगिन बटन से जुड़े हैं बटन, रजिस्टर बटन और हेल्प बटन। यह सत्यापित करेगा कि 3 बटन हैं, और वे ऐसा करते हैं जो उन्हें करना है (भरोसा है कि उन संदर्भों को कोड में जो करना है, वह करें)। –
संभवतः आपके आउटलेट "फाइल मालिक" से जुड़े हुए हैं, या निब में कुछ रूट ऑब्जेक्ट हैं? क्या आप उस ऑब्जेक्ट को प्राप्त कर सकते हैं, जिन आउटलेट्स का परीक्षण करने का प्रयास कर रहे हैं, उनके माध्यम से पुन: प्रयास करें, और उनके अस्तित्व, विशिष्टता और अन्य गुणों को सत्यापित करें? –