IOS рдРрдк рдЯреЗрд╕реНрдЯрд┐рдВрдЧ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдереЛрдбрд╝рд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдХрдЯрд░ рдХреЗ рддрд╣рдд, рдЗрдХрд╛рдИ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рдЖрд╡реЗрджрди рдХреЛ рдЧреАрдереВрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ ред

рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг


рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рджреЗрд╡рджрд╛рд░ ред
рдпрд╣ рдЖрдкрдХреЛ RSpec рд╢реИрд▓реА рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдЧрд┐рддреБрдм рдиреЗ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрдм рд╕рд╡рд╛рд▓ рдХрдИ рдорд╢реАрдиреЛрдВ рдкрд░ рдЗрдХрдЯреНрдард╛ рд╣реЛрдиреЗ рдХрд╛ рд╣реБрдЖ, рддреЛ рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрд╢ рдкрд░ рд▓рд┐рдЦреА рдЧрдИ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рд╕рднреА рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред

рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд▓реЛрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрдВрд╕реНрдЯрд╛рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рджреЗрд╡рджрд╛рд░ рдХреЛ / рдСрдкреНрдЯ / рджреЗрд╡рджрд╛рд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ (рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП)ред

рджреЗрд╡рджрд╛рд░ рдЗрдХрдЯреНрдард╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рдХреНрд╖реНрдп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  1. рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп (рдЦрд╛рд▓реА рдЖрд╡реЗрджрди) рдЬреЛрдбрд╝реЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдпреВрдирд┐рдЯрдЯреЗрд╕реНрдЯ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ред
  2. рд▓рд┐рдВрдХ рджреЗрд╡рджрд╛рд░ рдХреЛ рд▓рдХреНрд╖реНрдп рдХрд░реЗрдВ (рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдмрд╛рдЗрдирд░реА)
  3. рдЕрдиреНрдп рд▓рд┐рдВрдХрд░ рдЭрдВрдбреЗ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ -ObjC -all_load -lstdc ++
  4. AppDelegate рдирд┐рдХрд╛рд▓реЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  5. рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ main.m рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

int main(int argc, char *argv[]) { @autoreleasepool{ return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate"); } } 

рдкрд╣рд▓рд╛ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде UnitTests рд▓рдХреНрд╖реНрдп рдореЗрдВ рдПрдХ FooBar.mm рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 #import <Cedar-iOS/SpecHelper.h> using namespace Cedar::Matchers; SPEC_BEGIN(FooSpec) beforeEach(^{ NSLog(@"before each"); }); afterEach(^{ NSLog(@"after each"); }); describe(@"Foo", ^{ it(@"YES should be YES", ^{ YES should equal(YES); }); }); SPEC_END 


рдЕрдм рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред

рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рд╡рд░реНрдЧ рд╣реИрдВ рдЬреЛ рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкрдердкреНрд░рджрд░реНрд╢рдХ рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рдП, рдЪрд▓реЛ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред
рдЖрдЗрдП рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВред
рдЕрдкрдиреЗ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдЧрдгрдирд╛ рдкреНрд░рдмрдВрдзрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП CalculManager.mm) рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде:

 // CalculationManagerSpecs.mm #import <Cedar-iOS/SpecHelper.h> using namespace Cedar::Matchers; #import "CalculationManager.h" SPEC_BEGIN(CalculationManagerSpecs) describe(@"CalculationManager", ^{ it(@"sharedInstance should not return nil", ^{ id instance = [CalculationManager sharedInstance]; instance should_not be_nil; }); }); SPEC_END 


рдЬрдм рдЖрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ред
рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рддрд╛ рд░рд╣реЗ рдФрд░ рдЬрд╛рд░реА рд░рд╣реЗред

рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВред

 describe(@"calculations should be correct", ^{ CalculationManager *manager = [CalculationManager sharedInstance]; it(@"addition should be correct", ^{ NSInteger left = 5; NSInteger right = 37; NSInteger etalonResult = 42; NSInteger realResult = [manager add:left with:right]; realResult should equal(etalonResult); }); it(@"subtract should be correct", ^{ NSInteger left = 14; NSInteger right = 12; NSInteger etalonResult = 2; NSInteger realResult = [manager subtract:right from:left]; realResult should equal(etalonResult); }); }); 


рдмрд╕ рдЗрддрдирд╛ рд╣реА, рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░реАрдХреНрд╖рдг


IOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдЦреБрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рддреН рдХреИрд▓рд╛рд╢-рдЖрдИрдУрдПрд╕ рдФрд░ рдлреНрд░реИрдВрдХ ред

рдпреЗ рдЙрдкрдХрд░рдг рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ, рд╡реЗ рджреЛрдиреЛрдВ рдЖрдкрдХреЛ рдХрдХрдбрд╝реА рдкрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ , рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рд░реВрдмреА рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╣реИред
рдЬрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореБрдЭреЗ рдлреНрд░реИрдВрдХ рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдерд╛, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдХреИрд▓рд╛рдмреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдФрд░ рд╡реЗ рд╕рднреА рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдЪрд▓реЗ рдЧрдП, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред

рдЕрдм рдореИрдВ рдХреИрд▓рд╛рд╢ рдкрд░ рдмрд╕ рдЧрдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдХрдбрд╝реА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред

рдХрдХрдбрд╝реА

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛, рдмрд╕ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЛ рдХреИрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╡рд░рдг рдХреБрдЫ рд╕реНрдкрд╖реНрдЯрддрд╛ рд▓рд╛рдПрдЧрд╛ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рддреЛ, рдХрдХрдбрд╝реА рдореЗрдВ рдХрдИ рдореБрдЦреНрдп "рдирд┐рдХрд╛рдп" рд╣реИрдВ:

рдлрд╝реАрдЪрд░ рдХрдИ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ (рдпрд╛ рдЕрд╕рдВрдмрдВрдзрд┐рдд, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддрдп рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖рдХ рдФрд░ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 Feature: Manage Orders As a User I should be able to manage Orders through iOS application 

рдкрд░рд┐рджреГрд╢реНрдп рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдареЛрд╕ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред рдПрдХ рдирд╛рдо рдФрд░ рдЪрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИред

 Scenario: Create Order #steps 

рдЪрд░рдг - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд┐рд╡рд░рдг (рдПрдХ рдмрдЯрди / рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдкрд╛рда рдореЗрдВ рдкреНрд░рд╡реЗрд╢, рд╕реНрд╡рд╛рдЗрдк, рдЖрджрд┐)ред

 When I fill in "Title" with "FuuBar" And I touch "Save" button Then I should see alert view titled "Saved successully" 

рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 When /^I touch "([^"]*)" button$/ do |button_text| touch("button marked:#{button_text}") end 


рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╕рдордп, рдХрдХрдбрд╝реА рдПрдХ рдХрджрдо рдЙрдард╛рддреА рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддреА рд╣реИ, рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрд▓рд╛рддреА рд╣реИ рдФрд░ рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдард╛рддреА рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╛рдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдЖрдЗрдП, Calabash рдХреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдбреНрд╕ рдЪрд▓рд╛рдПрдВ:

 [sudo] gem install calabash-cucumber calabash-ios setup calabash-ios gen 

рдХреИрд▓рд╛рдмрд╢ рдиреЗ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдФрд░ рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ_рдирд╛рдо-рдХреИрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИрдВред
рдкреАрдврд╝реА рдХреЗ рдмрд╛рдж, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

 DEVICE=iphone OS=ios5 cucumber 


рд▓реЗрдХрд┐рди рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд╕рдм рдХреБрдЫ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреИрд▓рд╛рд╢ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЪрд░ - APP_BUNDLE_PATH рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Xcode 4.x рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ

~/Library/Application\ Support/iPhone\ Simulator/xx/Applications/hash/app_name.app

рдЬрд╣рд╛рдБ xx iOS рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдФрд░ рд╣реИрд╢ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП Xcode рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рд╣реИред
рдЕрдкрдирд╛ .app рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ

 APP_BUNDLE_PATH='~/Library/Application\ Support/iPhone\ Simulator/xx/Applications/hash/your_app-cal.app' DEVICE=iphone OS=ios5 cucumber 

рдЕрдм рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЧрд╛рд░реНрдб

рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреИрд▓рд╛рд╢ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХрд╣рд╛рдВ рд╣реИред рдФрд░ рдлрд┐рд░ рдЧрд╛рд░реНрдб рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред
рдЧрд╛рд░реНрдб рдПрдХ рд░рддреНрди рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░, рдЬрдм рдпрд╣ рдореЙрдирд┐рдЯрд░ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдЧрд╛рд░реНрдб рдХреА рд╕реВрдЪреА рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЧрд╛рд░реНрдб-рдХреИрд▓рд╛рдмрд╢-рдЖрдИрдУрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

 gem install guard-calabash-ios guard init calabash-ios 

рдпрд╣ рдПрдХ рдЧрд╛рд░реНрдбрдлрд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛ - рдПрдХ рдлрд╛рдЗрд▓ рдЬреЛ рдЧрд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЧреБрдгреЛрдВ рдФрд░ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред ( рд╡рд┐рд╕реНрддреГрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ github рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред )
рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ - Xcode рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЦреЛрд▓реЗрдВ рдФрд░ Relived рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░реЗрдВред рдЕрдм Xcode рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛, рдЬреЛ рдЧрд╛рд░реНрдб-рдХреИрд▓рд╛рд╢-рдЖрдИрдУрдПрд╕ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ APP_BUNDLE_PATH рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдм, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рдореНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 guard 


рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг

рдЕрдм рдЬрдм рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреИрд▓рд╛рдмрд╢ рдиреЗ рдлреАрдЪрд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдШрдЯрд╛рдиреЗ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рджреГрд╢реНрдп рдореЗрдВ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

My_first.feature рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

 Feature: Add numbers As a User I should be able to perform calculations Scenario: Add numbers When I fill in "left" with "15" And I fill in "right" with "10" And I touch "add" Then I should see "25" 

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЧрд╛рд░реНрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдЧрд╛, рдФрд░ рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рдиреА рд╣реЛрдЧреАред

рдЗрд╕рд▓рд┐рдП, рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣реЗ, рдЬреЛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред

рдЪрд▓реЛ рдПрдХ рдпреВрдЖрдИ рдЬреЛрдбрд╝реЗрдВред

рдХреИрд▓рд╛рд╢ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕рдмрд┐рд▓рд┐рдЯреА рд▓реЗрдмрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдЯрди рдХреЛ рдЙрди рдкрд░ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдФрд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рда рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдЖрджрд┐рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдпрд╛: рджреЛ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ рджреЛ рдмрдЯрди, "+" рдФрд░ "-"ред
рдЕрдкрдиреА рд╕реНрдХреНрд░реАрди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

1. рдмрдЯрди рдФрд░ рдкрд╛рда рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрд▓реЗрдЯ рдЬреЛрдбрд╝реЗрдВ
2. рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рд╣рдорд╛рд░реЗ рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб "рд▓реЗрдлреНрдЯ" рдФрд░ "рд░рд╛рдЗрдЯ" рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ
3. рдмрдЯрди рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рд▓реЗрдмрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ

 self.addButton.accessibilityLabel = @"add"; self.subtractButton.accessibilityLabel = @"subtract"; 

4. рд╣рдорд╛рд░реЗ рдмрдЯрди рдкрд░ рд╣реИрдВрдбрд▓рд░ рд▓рдЯрдХрд╛рдПрдВ

 - (IBAction)addButtonTapped:(id)sender { CalculationManager *calculationManager = [CalculationManager sharedInstance]; NSInteger left = [self.leftTextField.text integerValue]; NSInteger right = [self.rightTextField.text integerValue]; [self showResult:[calculationManager add:left with:right]]; } - (IBAction)subtractButtonTapped:(id)sender { CalculationManager *calculationManager = [CalculationManager sharedInstance]; NSInteger left = [self.leftTextField.text integerValue]; NSInteger right = [self.rightTextField.text integerValue]; [self showResult:[calculationManager subtract:right from:left]]; } 


5. рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ

 - (void)showResult:(NSInteger)result { NSString *resultString = [NSString stringWithFormat:@"%d", result]; [[[[UIAlertView alloc] initWithTitle:@"Result" message:resultString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show]; } 


6. рдЧрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдВрдЯрд░ рджрдмрд╛рдПрдВ, рдпрд╣ рдЖрдкрдХреА рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдЧрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓ рд╣реЛрдВрдЧреЗред

рдЕрдм рдШрдЯрд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВред

 Scenario: Subtract numbers When I subtract 15 from 38 Then I should see "23" as result 

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдХрдбрд╝реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧреА рдХрд┐ рдпрд╣ рдРрд╕реЗ рдХрджрдореЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛ред
рд╣рдо рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ calabash_steps.rb (project_dir / features / steps_definitions /) рдореЗрдВ рдореБрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ

 When /^I subtract (\d+) from (\d+)$/ do |subtrahend, minuend| step %{I fill in "left" with "#{minuend.to_s}"} step %{I fill in "right" with "#{subtrahend.to_s}"} step %{I touch "subtract"} end Then /^I should see "(.*?)" as result$/ do |result| res = query("view:'UIAlertView'", "message").first res.should == result end 


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдХреИрд╕реЗ рджрд┐рдЦрддреА рд╣реИрдВ, рдЪрд░рдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрдиреНрдп рдЪрд░рдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ (рдЪрд░рдг% {}), рдХреБрдЫ рдореВрд▓реНрдп (рдХреНрд╡реЗрд░реА) рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдФрд░ рдореБрдЦрд░ (рдХреИрд╕реЗ) рд▓рд┐рдЦрдирд╛ рд╣реИред

рдпрд╣ рд╕рдм рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╡рд░реНрдгрд┐рдд рдкрд░реАрдХреНрд╖рдг рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ TDD / BDD рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреВрдВрдЧрд╛:

Source: https://habr.com/ru/post/In144673/


All Articles