2009-08-23 12 views
27

में बीडीडी मैंने हाल ही में उद्देश्य-सी सीखना शुरू कर दिया है और ओक्यूनीट का उपयोग करके अपने परीक्षण लिखना शुरू किया है जो एक्सकोड के साथ बंडल किया जाता है।उद्देश्य-सी

मैं लंबे समय से रूबी प्रोग्रामर हूं और मुझे आरएसपीसी और ककड़ी - अच्छे बीडीडी ढांचे के लिए उपयोग किया जाता है।

क्या उद्देश्य-सी में उपयोग करने के लिए कोई सभ्य बीडीडी ढांचा है? मुझे याद आ रहा है कि मेरा होना चाहिए :)

उत्तर

17

uispec नामक एक अपेक्षाकृत नई परियोजना है जो आरएसपीसी के परीक्षण डीएसएल द्वारा प्रेरित थी। उदाहरण कल्पना इस तरह दिखता है:

#import "DescribeEmployeeAdmin.h" 
#import "SpecHelper.h" 

@implementation DescribeEmployeeAdmin 

-(void)before { 
    //login as default admin before each example 
    [SpecHelper loginAsAdmin]; 
} 

-(void)after { 
    //logout after each example 
    [SpecHelper logout]; 
} 

-(void)itShouldHaveDefaultUsers { 
    //Check that all default users are in list 
    [[app.tableView.label text:@"Larry Stooge"] should].exist; 
    [[app.tableView.label text:@"Curly Stooge"] should].exist; 
    [[app.tableView.label text:@"Moe Stooge"] should].exist; 
} 

-(void)itShouldAddAUser { 
    //Click the + button 
    [app.navigationButton touch]; 

    //Set the form fields. 
    //Also ".with" is optional so we here we can show the different syntax 
    [[app.textField.with placeholder:@"First Name"] setText:@"Brian"]; 
    [[app.textField.with placeholder:@"Last Name"] setText:@"Knorr"]; 
    [[app.textField.with placeholder:@"Email"] setText:@"[email protected]"]; 
    [[app.textField placeholder:@"Username"] setText:@"bkuser"]; 
    [[app.textField placeholder:@"Password"] setText:@"test"]; 
    [[app.textField placeholder:@"Confirm"] setText:@"test"]; 

    //Click the Save button 
    [[app.navigationButton.label text:@"Save"] touch]; 

    //Make sure the error alert view doesn't appear 
    [app timeout:1].alertView.should.not.exist; 

    //User list should now have a new entry 
    [[app.tableView.label text:@"Brian Knorr"] should].exist; 
} 

@end 

मन है कि मैं इसका इस्तेमाल कभी नहीं किया है रखें, तो इस बात की संभावना है कि यह वास्तव में अपनी आवश्यकताओं फिट नहीं होगा। लेकिन कम से कम, आप कोडबेस को अपने स्वयं के टेस्ट फ्रेमवर्क लिखने के लिए प्रेरणा के रूप में उपयोग करने में सक्षम होंगे।

+0

प्रोजेक्ट सक्रिय प्रतीत होता है और मुझे जो चाहिए वह दिखता है। धन्यवाद! –

+0

धन्यवाद यह बहुत अच्छा है। –

0

आपको अपनी टेस्ट विधि को उपसर्ग के साथ उपसर्ग करने से रोकना कुछ भी नहीं है। मैंने एन # एन में एनएनआईटी के साथ ऐसा किया।

+0

मैं जो भी कर रहा हूं वह सत्यापन के लिए विशिष्ट वाक्यविन्यास है। रूबी में ऐसा लगता है: method_under_test (args)। Should be_valid –

+1

प्रश्न पूछने वाला व्यक्ति उद्देश्य-सी और ओसीयूनीट के बारे में बात कर रहा है, जो परीक्षण विधियों को "परीक्षण" से शुरू करने की अपेक्षा करता है - इस तरह यह जानता है कि कौन सी विधियां परीक्षण की जाती हैं विधियों, चूंकि उद्देश्य-सी में सी # और जावा की तरह एनोटेशन नहीं हैं। –

8

ओसीयूनीट (सेनटेस्टिंगकिट, एक्सकोड के साथ शामिल) में STAssert मैक्रोज़ पर एक नज़र डालें।

अपनी खुद की इकाई परीक्षण बंडल में, आप एक काल्पनिक -shouldBeValid तरह के तरीकों जो तब ही पास फोन/मशीनरी कि STAssert मैक्रो अब क्या विफल हो जाएगा जोड़ने के लिए NSObject पर एक वर्ग को लागू कर सकते हैं।

मामले में आप सी पूर्वप्रक्रमक के साथ घनिष्ठ रूप से परिचित नहीं हैं ...

आप शायद भी अपने मैक्रो के लिए एक #define उपयोग करने के लिए __FILE__ और __LINE__ जब अपने BDD परीक्षण के लिए सही मूल्यों के माध्यम से पारित करना होगा असफल। उदाहरण के लिए, अगर आप इस तरह कुछ करने के लिए हो सकता है:

@interface NSObject (BehaviorDrivenDevelopment) 
- (void)shouldBeValidInFile:(const char *)file line:(int)line; 
@end 

#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__ 

इस तरह आप इसे इस तरह आह्वान होगा:

[[someObject methodUnderTest:argument] shouldBeValid]; 

कोड संकलक देखता है यह होगा:

[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__]; 

__FILE__ और __LINE__ प्रीप्रोसेसर मैक्रोज़ आपकी फ़ाइल स्रोत फ़ाइल में वर्तमान फ़ाइल और लाइन में विस्तारित होंगे।

इस तरह, जब आपके पास असफल परीक्षण होता है, तो यह Xcode पर वापस भेजने के लिए SenTestingKit को उपयुक्त जानकारी पास कर सकता है। विफलता बिल्ड परिणाम विंडो में ठीक से दिखाई देगी, और इसे क्लिक करने से आपको अपने परीक्षणों में विफलता के सही स्थान पर ले जाया जाएगा।

14

पिवॉटल लैब्स के एडम मिलिगन ने उद्देश्य-सी के लिए बीडीडी ढांचा बनाया है जिसे Cedar कहा जाता है जो कोको और कोको टच दोनों को लक्षित करता है। यह आरएसपीसी के समान तरीके से ब्लॉक का उपयोग करता है। ,

SPEC_BEGIN(FooSpecs) 

sharedExamplesFor(@"a similarly-behaving thing", ^(NSDictionary *context) { 
    it(@"should do something common", ^{ 
     ... 
    }); 
}); 

NSDictionary *context = [NSDictionary dictionary]; 

describe(@"Something that shares behavior", ^{ 
    itShouldBehaveLike(@"a similarly-behaving thing", context); 
}); 

describe(@"Something else that shares behavior", ^{ 
    itShouldBehaveLike(@"a similarly-behaving thing", context); 
}); 

SPEC_END 
21

मैं Kiwi Library एकीकृत करने के लिए त्वरित उपयोग कर रहा हूँ बहुत अच्छी तरह से काम करता है: यहाँ एक उदाहरण विनिर्देश है।

their github से:

describe(@"Team", ^{ 
    context(@"when newly created", ^{ 
     it(@"should have a name", ^{ 
      id team = [Team team]; 
      [[team.name should] equal:@"Black Hawks"]; 
     }); 

     it(@"should have 11 players", ^{ 
      id team = [Team team]; 
      [[[team should] have:11] players]; 
     }); 
    }); 
}); 
3

आप BDD From the idea to the app पर एक नज़र डालें जहां हुक़्क़ुम का उपयोग कर एक उदाहरण देखेंगे कर सकते हैं।