ÐÐΪÇý¶¯¿ª·¢(Behavior-Driven Development,BDD)ÊÇÒ»ÖÖ׿ԽµÄ¿ª·¢Ä£Ê½¡£ÄܰïÖú¿ª·¢ÕßÑø³ÉÈÕÇåÈÕ½áµÄºÃϰ¹ß£¬´Ó¶ø±ÜÃâÉõÖÁ¶Å¾ø“×îºóÒ»·ÖÖÓ”µÄÇé¿ö³öÏÖ£¬Òò´Ë¶ÔÌá¸ß´úÂëÖÊÁ¿ÊÇ´óÓÐñÔÒæµÄ¡£ÆäÓëGherkinÓï·¨Ïà½áºÏµÄ²âÊԽṹ¼°Éè¼ÆÐÎʽ£¬Ê¹µÃ¶ÔÍŶӵÄÈ«²¿³ÉÔ±°üÀ¨·Ç¼¼ÊõÈËÔ±¶¼¾ßÓм«ºÃµÄÒ×¶ÁÐÔ¡£
ËùÓдúÂë¶¼±ØÐë½øÐвâÊÔ£¬ÕâÒâζ×ÅÉÏÏßʱ°Ñϵͳ覴ýµµ½×îµÍÉõÖÁΪÁã¡£ÕâÐèÒªÓëÍêÕûµÄ²âÊÔÌ×¼þÏàÅ䣬´ÓÕûÌå°Ñ¿ØÈí¼þÐÐΪ£¬Ê¹µÃ¼ì²âÓëά»¤¶¼ÄÜÓÐÐò½øÐС£Õâ¾ÍÊÇBDDµÄ÷ÈÁ¦ËùÔÚ£¬ÄѵÀ²»Ð͝Âð£¿
ʲôÊÇBDD?
BDDµÄ¸ÅÄîºÍÀíÂÛÔ´×ÔTDD(²âÊÔÇý¶¯¿ª·¢)£¬ÀàËÆÓÚTDDµÄÀíÂÛÒªµãÊÇÔÚ±àÂëǰÏÈдºÃ²âÊÔ¡£²»Í¬µãÊdzýÁËʹÓõ¥Ôª²âÊÔ½øÐÐϸÁ£¶È»¯²âÊÔ£¬»¹Ê¹ÓýÓÊܲâÊÔ(acceptance tests)¹á´©³ÌÐòʼĩ¡£½ÓÏÂÀ´ÎÒÃÇ»á½áºÏLettuce²âÊÔ¿ò¼Ü½øÐн²½â¡£

BDD¹ý³Ì¿É¼òµ¥¸ÅÀ¨Îª£º
- ±àдһ¸öȱÏݽÓÊܲâÊÔ
- ±àдһ¸öȱÏݵ¥Ôª²âÊÔ
- ʹµ¥Ôª²âÊÔͨ¹ý
- ÖØ¹¹
- ʹ½ÓÊܲâÊÔͨ¹ý
ÔÚÿ¸ö¹¦ÄÜÀÈçÓÐÐèÒªÖØ¸´ÉÏÊö²½Öè¡£
Ãô½Ý¿ª·¢ÖеÄBDD
ÔÚÃô½Ý¿ª·¢ÖУ¬BDD¸üÊÇÈçÓãµÃË®¡£
Èç¹ûÏîÄ¿µÄй¦ÄܺÍÐÂÐèÇóÿ¸ôÒ»¡¢Á½¸öÐÇÆÚ¾Í·¢Éú±ä¸ü£¬ÄÇô¸ÃÍŶÓÐèÒªÅäºÏ½øÐпì½Ú×àµÄ²âÊԺͱàÂ빤×÷¡£PythonÖеĽÓÊܺ͵¥Ôª²âÊÔ¿ÉÒÔ°ïÖúʵÏÖ¸ÃÄ¿±ê¡£
½ÓÊܲâÊÔΪÈËÊìÖªµÄÊÇʹÓÃÁËÒ»¸öÓ¢ÎĸñʽµÄ“ÌØÐÔ”ÃèÊöÎļþ£¬ÄÚÈÝÊǺ¬ÓеIJâÊÔÒÔ¼°¸ö±ð²âÊÔ¡£ÕâÑù×öµÄºÃ´¦ÊÇʹÕû¸öÏîÄ¿ÍŶӶ¼²ÎÓëÆäÖУ¬³ýÁË¿ª·¢Õߣ¬»¹ÓйÜÀíÕßÓëÉÌÒµ·ÖÎöÕߵȲ»²ÎÓëʵ¼Ê²âÊÔ¹ý³ÌµÄ·Ç¼¼Êõ³ÉÔ±¡£
ÌØÐÔÎļþµÄ±àд×ñÑȫԱ¿É¶ÁµÄ¹æÔò£¬Ê¹¼¼ÊõºÍ·Ç¼¼Êõ³ÉÔ±¶¼ÄÜÇå³þÀí½âÓë½ÓÊÕ¡£Èç¹ûÖ»°üº¬µ¥Ôª²âÊÔ£¬ÄÇôÓпÉÄܻᵼÖÂÐèÇó·ÖÎö²»È«Ãæ»ò²»ÄÜ´ï³É¹²Ê¶¡£½ÓÊܲâÊÔµÄ×î´óÓŵãÊÇÊÊÓÃÐÔÇ¿£¬²»ÂÛÏîÄ¿¹æÄ£´óС¶¼ÄÜÔËÓÃ×ÔÈç¡£
GherkinÓï·¨
ͨ³£»áʹÓÃGherkinÀ´±àд½ÓÊܲâÊÔ£¬GherkinÀ´×ÔCucumber¿ò¼Ü£¬ÓÉRubyÓïÑÔËù±àд¡£GherkinÓ﷨ʮ·Ö¼òµ¥£¬ÔÚLettuce PythonÖÐÖ÷ҪʹÓÃÒÔÏÂ8µãÀ´½øÐÐÌØÐԺͲâÊԵ͍Ò壺
- Given¼ÙÉè
- Whenʱ¼ä
- ThenÏÂÒ»²½
- AndÓë
- FeatureÌØÐÔ£º
- Background±³¾°£º
- Scenario Outline³¡ºÏ´ó¸Ù£º
°²×°
ʹÓÃPython³£ÓõÄpip installÓï¾ä¾Í¿ÉÍê³ÉLettuce°üµÄ°²×°£º

$ lettuce /path/to/example.featureÓÃÓÚÔËÐвâÊÔ¡£¿ÉÒÔÿ´ÎÖ»ÔËÐÐÒ»¸ö²âÊÔÎļþ£¬»òÕßÊÇÌύĿ¼ÃûÀ´ÔËÐÐĿ¼ÏµÄËùÓÐÎļþ¡£
ΪÁËʹ²âÊԵıàдºÍʹÓøü¼ÓÈÝÒ×£¬ÎÒÃǽ¨Òé°ÑnosetestsÒ²°²×°ºÃ£º

ÌØÐÔÎļþ
ÌØÐÔÎļþÓÉÓ¢Óïд³É£¬ÄÚÈÝÊDzâÊÔËù¸²¸ÇµÄ³ÌÐò·¶Î§¡£´ËÍ⻹°üÀ¨²âÊԵĴ´½¨ÈÎÎñ¡£»»ÑÔÖ®£¬Äã³ýÁËÐèÒª±àд²âÊÔ£¬»¹µÃ¹æ·¶×Ô¼º¾Í³ÌÐòµÄ·½·½ÃæÃæ±àд³öÁ¼ºÃµÄÎĵµ¡£ÕâÑù×öµÄºÃ´¦ÊÇʹ×Ô¼º¶Ô´úÂëÉÏ϶¼ÐÄÖÐÓÐÊý£¬Ã÷È·ÏÂÒ»²½×öʲô¡£Ëæ×ÅÏîÄ¿¹æÄ£µÄÀ©´ó£¬ÎĵµµÄÖØÒªÐÔ»áÖð²½ÏÔÏÖ£»ÀýÈçÖØÐ»عËij¸ö¹¦ÄÜ»ò¶Ôij¸öµ÷ÓÃAPI½øÐлØËݵȵȡ£
½ÓÏÂÀ´»á½áºÏTDDÖеÄÒ»¸öʵÀý´´½¨Ò»¸öÌØÐÔÎļþ¡£¸ÃʵÀýÊÇÒ»¸öÓÉPythonд³ÉµÄ¼òÒ×¼ÆËãÆ÷£¬Í¬Ê±»áÑÝʾ½ÓÊܲâÊԵĻù±¾Ð´·¨¡£Ä¿Â¼¹¹³ÉµÄ½¨ÒéÊǽ¨Á¢Á½¸öÎļþ¼Ð£¬Ò»¸öÊÇapp£¬ÓÃÓÚ·ÅÖôúÂëÎļþÈçcalculator.py£»ÁíÒ»¸öÊÇtests£¬ÓÃÓÚ·ÅÖÃÌØÐÔÎļþ¼Ð¡£
calculator.py£º

tests/featuresĿ¼ÏµÄÌØÐÔÎļþcalculator.feature

´Ó¸ÃÀý×Ó²»ÄÑ¿´³öÌØÐÔÎļþµÄÃèÊöÊǷdz£Ö±½ØÁ˵±µÄ£¬Äܹ»Ê¹È«Ìå³ÉÔ±¶¼ÄÜ¿´Ã÷°×¡£
ÌØÐÔÎļþµÄÈý¸öÒªµã£º
- Feature block(ÌØÐÔÇø¿é)£º¸Ã´¦ÃèÊöÁ˲âÊÔ×éËùº¸ÇµÄ³ÌÐòÄÚÈÝ¡£ÕâÀï²»Ö´ÐÐÈκδúÂ룬µ«ÄÜʹÔĶÁÕßÃ÷°×ÕýÒª½øÐÐʲôÑùµÄÌØÐÔ²âÊÔ¡£
- Background block(±³¾°Çø¿é)£ºÏÈÓÚÌØÐÔÎļþÖÐÿ¸ö³¡¾°(Scenario)Çø¿éÖ´ÐС£ÕâÀàËÆÓÚSetUp()·½·¨ÓÃÓÚ½øÐд´½¨´úÂëµÄ±àд£¬ÀýÈç½øÐÐÌõ¼þºÍλÖõıàд¡£
- Scenario block(³¡¾°Çø¿é)£ºÕâÀïÓÃÓÚ¶¨Òå²âÊÔ¡£µÚÒ»ÐÐÓÃ×÷ÎĵµÔÙÒ»´ÎµÄÃèÊö£¬½Ó×ÅÊDzâÊԵľßÌåÄÚÈÝ¡£ÒÔÕâÑùµÄ·ç¸ñ±àд²âÊÔÄѵÀ²»ÊǺܼòµ¥Âð£¿
²½Öè(Steps)Îļþ
³ýÁËÌØÐÔÎļþ£¬²½ÖèÎļþÒ²ÊDZØÐëµÄ£¬ÕâÊÇ“¼ûÖ¤Ææ¼£µÄʱ¿Ì”¡£ÏÔÈ»µØ£¬ÌØÐÔÎļþ±¾Éí²»»á×ö³öʲô½á¹û£»ËüÐèÒª²½ÖèÎļþÒÀ´ÎµØÓëPythonÖ´ÐдúÂëÒ»Ò»Ó³Éä²ÅÓÐ×îºóµÄ½á¹ûÊä³ö¡£ÕâÀïÓ¦ÓõÄÊÇÕýÔò±í´ïʽ¡£
ÕýÔò±í´ïʽ£¿²»»á¹ýÓÚ¸´ÔÓÂð£¿ÆäʵÔÚBDDÊÀ½çÀÕýÔò±í´ïʽ³£ÓÃÓÚ²¶×½Õû¸ö×Ö·û´®»ò´ÓijÐÐץȡ±äÁ¿¡£ËùÒÔÊìÄÜÉúÇÉ¡£
ÕýÔò±í´ïʽ£¿ÔÚ²âÊÔÖÐʹÓò»»áÌ«¸´ÔÓÂð£¿ÔÚLettuceÊDz»»áµÄ£¬·´¶øÊǷdz£¼òµ¥µÄ¡£
ÒÔÏÂÊǶÔÓ¦µÄ²½ÖèÎļþµÄ±àд£º

ÎļþÊײ¿·ÖÊDZê×¼µÄµ¼Èëд·¨¡£ÀýÈç¶ÔCalculatorµÄ·ÃÎʺÍLettuce¹¤¾ßµÄµ¼È룬»¹ÓÐnosetest°üÖÐassert_equals¶Ï¶¨·½·¨µÄµ¼Èë¡£½ÓÏÂÀ´£¬Äã¾Í¿ÉÒÔ¿ªÊ¼Õë¶ÔÌØÐÔÎļþµÄÿһÐнøÐв½Ö趨Òå¡£ÈçǰËùÊö£¬ÕýÔò±í´ïʽºÜ¶àʱºòÓÃÓÚÌáÈ¡Õû¸ö×Ö·û´®£¬³ýÁËÓÐʱÐèÒªÔÚijÐжԱäÁ¿½øÐзÃÎÊ¡£
ÔÚÕâ¸öÀý×ÓÖУ¬ ÀïµÄ@stepÆðµ½½âÂëÌáÈ¡µÄ×÷Óã»u×ÖĸµÄÒâ˼ÊÇÒÔunicode±àÂ뷽ʽ½øÐбí´ïʽִÐС£½Ó×ÅÊÇʹÓÃÕýÔò±í´ïʽ¶ÔÒýÓõÄÄÚÈݽøÐÐÆ¥Å䣬ÕâÀïÊÇÒª½øÐÐÏà¼ÓµÄÊý×Ö¡£
È»ºóÊǶÔPython·½·¨´«Èë±äÁ¿£¬±äÁ¿Ãû¿ÉÈÎÒⶨÒ壬ÕâÀïʹÓÃxºÍy×÷Ϊcalculator add·½·¨µÄ´«Èë±äÁ¿Ãû¡£
´ËÍâÐèÒª½éÉÜworld±äÁ¿µÄʹÓá£worldÊÇÒ»¸öÈ«¾ÖÈÝÆ÷£¬Ê¹µÃ±äÁ¿¿ÉÒÔÔÚͬһ³¡¾°µÄ²»Í¬²½ÖèÖÐʹÓ᣷ñÔò£¬ËùÓбäÁ¿Ö»¶ÔÓ¦ÓÚÆäËùÔÚ·½·¨¿ÉÓá£ÀýÈç°Ñadd·½·¨µÄÔËËã½á¹û´æ·ÅÓÚij¸östep£¬¶øÔÚÁíÒ»ÍâÒ»¸östep½øÐнá¹ûµÄ¶Ï¶¨¡£
ÌØÐÔµÄÖ´ÐÐ
ÌØÐÔÎļþºÍ²½ÖèÎļþ¶¼Íê³Éºó£¬½ÓÏÂÀ´¿ÉÒÔÔËÐвâÊÔÀ´¿´¿´ÄÜ·ñͨ¹ý¡£ÄÚ½¨²âÊÔÔËÐлúµÄLettuceÖ´Ðз½Ê½ÊǺܼòµ¥µÄ£¬ÀýÈçlettuce test/features/calculator.feature£º

LettuceµÄÊä³öÊǷdz£¹¤ÕûµÄ£¬ËüÇå³þÏÔʾÁËÄÄÐÐÌØÐÔÎļþ´úÂë±»Ö´ÐÐÁË£¬È»ºó¶Ô³É¹¦Ö´ÐеÄÐÐÒÔ¸ßÁÁÂÌÉ«ÏÔʾ¡£´ËÍ⻹ÏÔʾÁËÕýÔÚÔËÐеÄÌØÐÔÎļþÒÔ¼°Ðкţ¬Õâ¶ÔÓÚ²âÊÔʧ°Üʱ½øÐÐÌØÐÔÎļþȱÏÝÐеIJéÕÒÊǺÜÓаïÖúµÄ¡£Êä³öĩβÊÇÌØÐÔ£¬³¡¾°£¬²½ÖèµÄÖ´ÐиöÊýÒÔ¼°Í¨¹ý¸öÊýµÄ½á¹û»ã×Ü¡£±¾ÀýÖÐËùÓвâÊÔ¶¼Í¨¹ýÁË¡£µ«Èç¹û³öÏÖ´íÎó£¬Lettuce»áÈçºÎ´¦ÀíÄØ£¿
Ê×ÏȵöÔcalculator.py´úÂë½øÐÐÐ޸쬰Ñadd·½·¨¸ÄΪÁ½ÊýÏà¼õ£º

ÔÙ´ÎÔËÐУ¬¿´¿´LettuceÊÇÈçºÎ¶Ô´íÎó½øÐÐ˵Ã÷µÄ£º

ÏÔÈ»£¬Êµ¼Ê½á¹û0ÓëÔ¤ÆÚ½á¹û4ÊDz»·ûµÄ¡£LettuceÇå³þÏÔʾÁ˸ÃÎÊÌ⣬½ÓÏÂÀ´¾ÍÊǵ÷ÊÔÅÅ´íÖ±µ½Í¨¹ýµÄʱ¼äÁË¡£
ÆäËü¹¤¾ß

ÔÚPythonÖл¹ÌṩÁ˺ܶ಻ͬµÄ¹¤¾ßÀ´½øÐÐÀàËÆµÄ²âÊÔ£¬ÕâЩ¹¤¾ß»ù±¾Ô´×ÔCucumber¡£ÀýÈ磺
- Behave£ºÕâÊÇÒ»¸öCucumber½Ó¿Ú¡£ÎĵµÅäÌ×Æë±¸£¬±£³Ö¸üУ¬Óв»ÉÙµÄÅäÌ×¹¤¾ß¡£
- Freshen£ºÁíÒ»¸öCucumber½Ó¿Ú£¬ÅäÌ×ÍøÕ¾ÓÐÍêÕûµÄ½Ì³ÌºÍʵÀý£¬°²×°·½Ê½¶¼ÊǼòµ¥µÄpip·½Ê½¡£
²»ÂÛʹÓÃʲô¹¤¾ß£¬Ö»Òª¶Ôij¸ö¹¤¾ßÔËÓÃÊìÁ·ÁË£¬ÆäËüµÄ×ÔÈ»ÄÜÈÚ»á¹áͨ¡£¶Ô½Ì³ÌÎĵµµÄÊì¶ÁÊdzɹ¦µÄµÚÒ»²½¡£
Óŵã
×ÔÐŵؽøÐдúÂëÖØ¹¹
ʹÓÃÒ»¸öÍêÕû²âÊÔÌ×¼þµÄÓŵãÊÇÏÔ¶øÒ×¼ûµÄ¡£ÕÒµ½Ò»¸öÇ¿´óµÄ²âÊÔÌ×¼þ£¬»áÈôúÂëÖØ¹¹¹¤×÷ʰ빦±¶£¬ÐÅÐÄÂúÂú¡£
Ëæ×ÅÏîÄ¿¹æÄ£µÄ²»¶ÏÀ©´ó£¬Èç¹ûȱ·¦ÓÐЧµÄ¹¤¾ß£¬Õⲻ഻áʹ»ØËݺÍÖØ¹¹¹¤×÷À§ÄÑÖØÖØ¡£Èç¹ûÓÐÒ»Ì×ÍêÕûµÄ½ÓÊܲâÊÔÀ´Óëÿ¸öÌØÐÔÒ»Ò»¶ÔÓ¦£¬ÄÇô½«ÄÜʹ±ä¸ü¹¤×÷ÓÐÐò²»ÎɵؽøÐУ¬²»»á¶ÔÏÖÓй¦ÄÜÄ£¿éÔì³ÉÆÆ»µ¡£
ȫԱ¶¼ÄܲÎÓëÆäÖеĽÓÊܲâÊÔ£¬½«Äܼ«´óµØÌáÉýÍŶÓÕ½¶·Á¦£¬Ò»¿ªÊ¼¾Í³¯×ÅͬһĿ±êǰ½ø¡£³ÌÐòÔ±¿É°Ñ¾«Á¦ÓÃÔÚ¾«È·µÄÄ¿±êÉÏ£¬±ÜÃâÐèÇó·¶Î§µÄʧ¿Ø£»²âÊÔÔ±¿É¾ÍÌØÐÔÎļþ½øÐÐÒ»Ò»¼ìÔÄ£¬°Ñ²âÊÔ»·½Ú×öµ½¼«Ö¡£×îºóÐγÉÁ¼ÐÔÑ»·£¬Ê¹µÃ³ÌÐòµÄÿ¸öÌØÐÔ¶¼ÍêÃÀ½»¸¶¡£
×ÛÊö
½áºÏÉÏÊö¹ý³ÌºÍ¹¤¾ß£¬ÔÚ¹ýÍù¹¤×÷¹ýµÄÍŶÓÖÐÎÒÃǶ¼ÔøÈ¡µÃ²»´íµÄ³É¼¨¡£BDD¿ª·¢·½Ê½¿ÉʹÕû¸öÍŶӱ£³Öרע£¬±£³Ö×ÔÐÅ£¬±£³Ö»îÁ¦£¬²¢Ê¹Ç±ÔÚ´íÎó½µµ½×îµÍ¡£ |