ÐÐΪÇý¶¯¿ª·¢£¨BDD Behavior Driven Development£©Ö¸¿ª·¢ÕßÕ¾ÔÚ¿Í»§µÄ½Ç¶ÈÀ´¹Û²ìϵͳ£¬Ë¼¿¼ÏµÍ³Ó¦¸Ã¾ßÓÐʲôÑùµÄÐÐΪ²ÅÄÜÂú×ã¿Í»§ÐèÇóµÄÕâÑùÒ»ÖÖ¿ª·¢¹ý³Ì¡£BDD
»ùÓÚÒ»ÖÖ¡°Í¨ÓÃÓïÑÔ¡±¶¨ÒåÁËͬʱÄܱ»¿Í»§ºÍ¿ª·¢ÕßÀí½âµÄϵͳÐÐΪ£¬ÔÚ×î´ó³Ì¶ÈÉϱÜÃâ±í´ï²»Ò»Ö´øÀ´µÄÎÊÌâ¡£»ùÓÚÕâһ˼Ï룬±¾ÎÄÒÔ
Linux ƽ̨Ϊ»ù´¡£¬Í¼ÎIJ¢Ã¯µÄ½âÎöÁËÆäÓ¦ÓÃÓÚ Python µÄ¿ª·¢²âÊÔ¹ý³Ì£¬²¢¸ø³öÁË Python
ÓïÑÔ Lettuce ²âÊÔ¿ò¼Ü´î½¨µÄÏêϸ²½Öè¡£¼ÈÓÐÖúÓÚÓû§ÐÎÏóÀí½â BDD ÀíÂÛ£¬ÓÖ¶Ô Python ѧϰÕßÓÐºÜºÃµÄ½è¼øÒâÒå¡£
ÐÐΪÇý¶¯¿ª·¢ (BDD) ¼ò½é
ÐÐΪÇý¶¯¿ª·¢ÊÇʲô£¿
˵µ½ÐÐΪÇý¶¯¿ª·¢£¨BDD£©£¬Î޿ɱÜÃâµÄÒªÌáµ½Ãô½ÝÀïÃæµÄ²âÊÔÇý¶¯¿ª·¢£¨TDD£©£¬TDD µÄÖ÷Ҫ˼ÏëÊÇ¡°´úÂë¼´Îĵµ¡±£¬Æä³«µ¼µÄÁ÷³ÌÊǸù¾ÝÉè¼Æ±àд²âÊÔ->
ʵÏÖÉè¼ÆµÄ¹¦ÄÜ -> ÓòâÊÔ´úÂëÑéÖ¤ -> ÖØ¹¹ÊµÏÖ´úÂë -> ¸ÄÉÆÉè¼Æ ->
Ôٴλص½¸ù¾Ý¸ÄÉÆµÄÉè¼Æ±àд²âÊÔ¡£
ͼ 1 »ùÓÚ TDD µÄÏîÄ¿¿ª·¢Á÷³Ì
BDD£¬¼´ÐÐΪÇý¶¯±à³Ì£¬ÊÇ TDD µÄÒ»¸ö¸Ä½ø°æ±¾£¬BDD ±¾ÖÊÉÏÒ²ÊÇ TDD£¬µ«ÊÇ±È TDD Òª¸ü¼Ó×ÔȻһЩ£¬¸ü
DSL »¯¡£ÏµÍ³ÒµÎñר¼ÒÒÔ¼°²âÊÔ¿ª·¢ÈËÔ±Ò»ÆðºÏ×÷£¬·ÖÎö³öÈí¼þµÄÐèÇó£¬È»ºóÏñ¹ÊÊÂÒ»ÑùÃèÊö³öÒ»¸ö¸ö¾ßÌå¿ÉÖ´ÐеÄ
Behavior£»Ö®ºó¿ª·¢Õ߸ºÔðÌî³äÕâЩ¹ÊʵÄÄÚÈÝ£¬²âÊÔÈËÔ±¸ºÔð¼ìÑé¹Êʽá¹ûµÄÕýÈ·ÐÔ¡£Ò»¸ö±È½Ï¼òµ¥µÄ°¸Àý¼´Óû§µÇ¼³¡¾°²âÊÔ£º
ͼ 2 Óû§µÇ¼³¡¾°²âÊÔ
×÷ΪÆÕͨÓû§£¬ÎÒÔÚµÇÂ¼ÍøÕ¾Ê±£¬¾ÍÇ£³¶µ½Óû§ÃûºÍÃÜÂëµÄУÑ顣ͬÑùµÄ¹ÊʾÍÒò´Ë»áÓв»Í¬µÄ³¡¾°·¢Éú:
ͼ 3 ·Ç·¨Óû§µÇ¼³¡¾°
Èç¹ûÊÇÒ»¸öºÏ·¨Óû§À´·¢³öÇëÇó£¬ÄÇôÓÖ½«ÊÇÁíÍâÒ»¸ö³¡¾°£º
ͼ 4 ºÏ·¨Óû§µÇ¼³¡¾°
ÓÐÁËÕâЩ³¡¾°ÃèÊö£¬²âÊÔÈËÔ±¿ÉÒÔͨ¹ýһЩ BDD ²âÊÔ¿ò¼Ü½«ÉÏÃæµÄ¹ÊÊÂת³É²âÊÔ´úÂë, ¿ª·¢ÕßʵÏÖ²úÆ·¹¦ÄÜ£¬±£Ö¤ËùÓеIJâÊÔ°¸Àý³É¹¦Í¨¹ý¡£
ΪʲôҪ½øÐÐÐÐΪÇý¶¯¿ª·¢£¿
ÈçÉÏ¿ÉÒÔ¿´³ö£¬ÐÐΪÇý¶¯¿ª·¢µÄ¸ù»ùÊÇÒ»ÖÖ¡°Í¨ÓÃÓïÑÔ¡±£¬ÀàËÆÓÚÓÃÒ»¸ö×îС»¯µÄ´Ê»ã±íÀ´¶¨Ò壬ÆäÖÐÕâЩ´Ê»ã¾ßÓÐ׼ȷÎÞÎóµÄ±í´ïÄÜÁ¦ºÍÒ»Öµĺ¬Òå¡£
as Ö¸Ã÷ϵͳÐÐΪÊÇΪʲô½ÇÉ«¶ø¶¨ÒåµÄ¡£
In order to ºÍ I want ¶¨ÒåÁËÐÐΪµÄ·¶Î§£¬±íÃ÷ÁËÏë´ïµ½µÄÄ¿µÄ£¬Ïë×öµÄÊÂÇé¡£
Given ¸ø³öÁË×¼±¸Òª²âÊԵĶÔÏóºÍ²âÊÔ»·¾³¡£
When µ÷ÓÃÒª²âÊÔµÄÒµÎñ·½·¨¡£
Then ¶Ô²âÊÔ½á¹û½øÐÐÑéÖ¤
ÕâÖÖͨÓÃÓïÑÔͬʱ±»ÐèÇ󣬿ª·¢£¬²âÊԺͿͻ§µÈÏîÄ¿Ïà¹ØÈËÔ±ÓÃÀ´¶¨ÒåϵͳµÄÐÐΪ¡£ÕâÑù×Ó´ó¼Ò¿´µ½µÄÃèÊöÒ»Ö£¬ÄÚÈÝÒ»Ö£¬×î´ó³Ì¶ÈµÄ½»¸¶³ö·ûºÏÓû§ÆÚÍûµÄ²úÆ·£¬±ÜÃâ±í´ï²»Ò»Ö´øÀ´µÄÎÊÌâ¡£
ͼ 5 ʹÓÃÐÐΪÇý¶¯¿ª·¢µÄ¿ª·¢×´Ì¬Í¼
¹ÅÈËÔÆ¡°¹¤ÓûÉÆÆäÊ£¬±ØÏÈÀûÆäÆ÷¡±£¬Òò´ËÔÚÏêϸ½éÉÜ»ùÓÚ BDD ˼ÏëµÄ Python ¿ª·¢²âÊÔ¹ý³Ì֮ǰ£¬ÎÒÃÇÏÈÀ´¿´Ò»ÏÂÈçºÎ´î½¨Ò»¸öÓÐЧÒ×ÓÃÇÒÎȶ¨µÄ²âÊÔ¿ò¼Ü¡£
Python BDD ²âÊÔ¿ò¼ÜµÄ´î½¨
Lettuce ¼ò½é
ΪʲôÔÚÕâÀïÒªÌáµ½ Lettuce ÄØ£¿¿´ËüµÄ¹ÙÍø½éÉÜ£¬Õâ¸ö¿ò¼ÜÔÚ Python ÓïÑԵIJâÊÔÓ¦Óÿ°±È Ruby
ÓïÑÔÁìÓòµÄ Cucumber£¬Ëü¿ÉÒÔ¶Ô Python ÏîÄ¿½øÐÐ×Ô¶¯»¯²âÊÔ£¬ÖµµÃ×¢ÒâµÄÊÇÕâÀïµÄ²âÊÔÓÃÀýÊÇ´¿Îı¾µÄ£¬¾ßÓкܺõĿɶÁÐÔ¡£ÕâÑùµÄ»°£¬¼´Ê¹ÊDz»¶®±à³ÌµÄÈËÒ²¿ÉÒÔÕ¾ÔÚϵͳ»òÓû§µÄ½Ç¶ÈÀ´Ð´²âÊÔÓÃÀý£¬²¢ÇÒÔÚÏîÄ¿¿ª·¢¹ý³ÌÖУ¬Õâ¸ö×Ô¶¯»¯²âÊÔÓÃÀý¿ÉÒÔºÜÈÝÒ×µÄÐ޸ġ¢À©³ä£¬¿ª·¢ÈËÔ±Ò²ÄܺܿìµÄµ÷Õû£¬´Ó¶ø±£Ö¤²âÊÔÓÃÀý˳Àûͨ¹ý¡£
´î½¨ Lettuce ²âÊÔ¿ò¼Ü
Ç°ÃæÒѾ˵Á˺ܶà Lettuce µÄ×÷Óúͺô¦£¬ÄÇôÏÂÃæÎÒÃÇÀ´¿´ÏÂÈçºÎÔÚ×Ô¼ºµÄ»·¾³ÉϴÕâÑùÒ»¸ö²âÊÔ¿ò¼Ü¡£½ÓÏÂÀ´±ÊÕß½«¸ø³ö
Redhat Linux + Python2.6 ÕâÑùµÄ»·¾³ÏµĴ²½Öè¡£
Ê×ÏÈ£¬Python Éϰ²×° package µÄʱºò£¬Ò»°ã¶¼»á½¨Á¢Ò»¸ö Virtualenv¡£
ÈçºÎÀ´Àí½â Virtualenv ÄØ£¿VirtualenvÊÇÒ»¸ö Python »·¾³¹ÜÀí¹¤¾ß£¬Ëü¿ÉÒÔ´´½¨¶ÀÁ¢µÄ
Python »·¾³£¬¶à¸ö Python Ï໥¶ÀÁ¢£¬»¥²»Ó°Ïì¡£¼òµ¥µÄÀ´Ëµ£¬Äã¿ÉÒÔ½«Ëü¿´×öÊÇÒ»¸ö¸ö¸ôÀëµÄɳºÐ£¬Ã¿Ò»¸öɳºÐÖ®¼äÏà¶Ô¶ÀÁ¢£¬±£³Ö×ÅÒ»¸öÏà¶Ô¶ÀÁ¢¸É¾»µÄ»·¾³¡£¿ÉÄÜÕâÑù˵£¬Ä㻹ûÓÐÀí½âµ½ËüµÄʵ¼ÊºÃ´¦£¬ÊÔÏëһϣ¬Äã֮ǰÓÐÒ»¸öÏîÄ¿
A ÐèÒªÒÀÀµ Django1.2.5, ¶øÏÖÔÚÓÖÓÐÒ»¸öеÄÏîÄ¿ B£¬ËüÐèÒªÒÀÀµ Django1.3£¬Õâʱ³ýÁ˰ÑËüÃǷŵ½²»Í¬µÄɳºÐÀïÃæ£¬Ä㻹¿ÉÒÔÖØÐ´îÒ»Ì×
Python »·¾³£¬ÉõÖÁÓÚÐèÒª»»Ì¨»úÆ÷£¬ÕâÑùɳºÐµÄºÃ´¦¾ÍÏÔ¶øÒ×¼ûµÄÁË£¬Ó¦¸ÃûÓÐÈ˻᲻ϲ»¶Õâô¼òµ¥µÄ·½·¨¡£ºÃµÄ£¬¼ÈȻϲ»¶£¬ÄÇôÈçºÎÀ´°²×°²¢¼¤»îÄØ£¿
1.install virtualenv
easy_install virtualenv-1.6.4.tar.gz
2.create virtual environment (vevn)
virtualev [vevn_folder] --no-site-packages
3.enter into [venv_folder]
source bin/active
½öÐèÒªÒÔÉÏ 3 ¸öÃüÁî¾Í¿ÉÒÔ°²×°²¢¼¤»î Virtualenv ÁË£¬ÖµµÃ×¢ÒâµÄÊÇ£¬Õâ¸ö Virtualenv
¿´ÉÏÈ¥¾ÍÊǸöÎļþ¼Ð [vevn_folder]£¬¿ÉÒÔºÜÈÝÒ×µØÉ¾³ý¡¢Öؽ¨µÈµÈ£¬µ«ÔÚÿ´ÎʹÓÃǰ¶¼ÐèÒª½«Ëü¼¤»î¡£
ÁíÍâÎÒÃÇÕâÀïʹÓÃÁË easy_install ÃüÁÕâÊÇ setuptools ´øµÄÒ»¸öÃüÁÆäÖÐ setuptools
ÊÇÒ»¸ö·Ç³£ºÃµÄÓ¦ÓÃÓÚ Python µÄ°²×°¹¤¾ß£¬Ê¹ÓÃËü£¬¿ÉÒÔʹÓÃÈçÉϺܼòµ¥µÄÃüÁîÀ´°²×°ËùÐèÒªµÄ package¡£ÈçϾÍÊǰ²×°
setuptools ºÍ Virtualenv µÄ²½Öèͼ£º
ͼ 6 °²×° setuptools

ͼ 7 °²×°²¢¼¤»î Virtualenv
Æä´Î£¬ÎÒÃÇÐèÒªÇå³þµÄÊÇ£¬Lettuce °²×°°üÓкܶàÒÀÀµ£¬Òò´ËÔÚ°²×°Ö®Ç°ÎÒÃǵý«ËùÓеÄÒÀÀµ°ü×°ºÃ¡£
ÎÒÃÇ¿ÉÒÔ´ÓÍøÕ¾ÉÏÏÂÔØÕâЩÐèÒªµÄ°üµ½±¾µØ£¬µ±È»Ò²¿ÉÒÔÖ±½ÓÓà setuptools À´°²×°£¬Èç¹û±¾µØÃ»Óа²×°°ü£¬Ëü»á×Ô¶¯ÏÂÔØ
package µÄ×îа汾À´°²×°¡£²»¹ÜÔõôÑù£¬ÐèҪעÒâµÄÊÇ£¬ÓÉÓÚÕâЩ°üÖ®¼ä´æÔÚÒÀÀµ¹ØÏµ£¬Òò´ËÐèÒª°´ÕÕÌØ¶¨Ë³ÐòÀ´½øÐа²×°¡£ÒÔϾÍÊÇËùÓÐÒÀÀµ°üµÄ˳Ðò°²×°£º
±í 1 Lettuce ˳Ðò°²×°°ü

°²×°ÍêÖ®ºó¿ÉÒÔ×öÈçϵļòµ¥²âÊÔÀ´È·¶¨ÊÇ·ñ°²×°³É¹¦¡£
ÔÚÃüÁîÐÐÀïÖ±½ÓÊäÈë Lettuce, ÈçͼËùʾ£¬Èç¹ûÏÔʾÀàËÆÕÒ²»µ½ features µÄÌáʾÐÅÏ¢£¬ÄÇô¹§Ï²ÄãÒѾ³É¹¦°²×°ÉÏÁË
Lettuce ²âÊÔ¿ò¼Ü¡£
ͼ 8 Lettuce °²×°ÑéÖ¤
µ½ÕâÀËãÊÇ´òºÃÁË»ù´¡£¬»ØÍ·ÔÙ¿´¿´£¬°²×°Ê±ÐèҪעÒâµÄÓÐÒÔÏ 2 ¸ö·½Ã棺
1. Èç¹û½¨Á¢µÄÓÐ Virtualenv£¬ÄÇôÔÚ×öÈκβÙ×÷֮ǰ±ØÐëÒªÏȼ¤»îËü£»
2. ¶ÔÓÚ Python À´Ëµ£¬ÌرðÊÇҪעÒâ°üÖ®¼äµÄÒÀÀµ£¬Èç¹û²»Çå³þ£¬¿ÉÒÔÏȲé²é£¬ÊµÔÚ²»ÐУ¬Óà easy_install
Õâ¸ö¹¤¾ßÀ´°²×°£¬Ëü»á×Ô¶¯¼ì²éÒÀÀµ¹ØÏµ£¬Èç¹ûȱʧÔò»á×Ô¶¯´ÓÍøÉÏÏÂÔØ×îÐÂµÄÆ¥Åä°æ±¾²¢½øÐа²×°£¬µ«Óöµ½ÒÀÀµ¹ØÏµ¸´ÔÓ¶øÍøÂç×´¿öÓÖ²»ºÃµÄʱºò£¬×îºÃÊÖ¶¯ÏÂÔØ·Åµ½±¾µØÄ¿Â¼£¬¾ÍÏñ±¾ÎÄÖÐÓõ½µÄ°üÒ»Ñù¡£
»ùÓÚ BDD ˼ÏëµÄ Python ¿ª·¢²âÊÔ¹ý³Ì
½ÓÏÂÀ´ÕâÒ»Õ£¬ÎÒÃÇÏ£Íûͨ¹ýÉú¶¯ÏêϸµÄ°¸ÀýÀ´½²Êö²âÊÔÓÃÀý¼°²âÊԽű¾µÄ±àдºÍÔËÐйý³Ì¡£±ÈÈç˵ÎÒÃÇÏë×Ô¼ºÊµÏÖÒ»¸ö¼ÆËãÕûÊý
n ´Î·½µÄ¼ÆËãÆ÷£¬µ±È»Õâ¸ö³ÌÐò¿ÉÄܱȽϼòµ¥£¬µ«ÕâÀïΪÁ˸üºÃµÄÀí½â BDD µÄ˼Ï룬ÎÒÃǼÙÉèËüºÜ¸´ÔÓ£¬¸Õ¿ªÊ¼²»ÖªµÀÔõôʵÏÖ£¬ÎÒÃǾÍÖ»ºÃÏÈд²âÊÔÓÃÀý£¬È»ºóÒ»²½²½µÄÐ޸ĴúÂëÈÃËùÓпÉÄܵÄÓÃÀýͨ¹ý¡£½ÓÏÂÀ´±¾ÎĽ«ÒÔ
4 ¸öµü´úÏêϸÃèÊö¸Ã¹ý³Ì¡£
²âÊÔÓÃÀý¼°²âÊԽű¾µÄ±àд
ÔÚд²âÊÔÓÃÀýʱ£¬¾Í²ÎÕÕÇ°ÃæÕ½ÚËù½éÉܵģ¬ÓÃһЩ¼òµ¥ÎÞÒìÒéµÄ×îС´Ê»ã×éÀ´ÃèÊö¿ÉÄܵÄÓû§³¡¾°¡£
µü´ú 1
Ïȸø³öÒ»¸ö n ´Î·½¼ÆËãÆ÷³ÌÐòµÄ½Ó¿Ú computePow.py£¬ÈçÏÂËùʾ£¬ÎÒÃDz»ÖªµÀÈçºÎʵÏÖËü£¬ËùÒÔÈüÆËã½á¹û¶¼Îª-1¡£
ͼ 9 ¼ÆËã³ÌÐò½Ó¿Ú¶¨Òå
½ÓÏÂÀ´ÏÈÀ´Ò»Ìõ×î¼òµ¥µÄ²âÊÔÓÃÀý computePow.feature£¬ÈçÏÂͼËùʾ£¬Õâ¸ö²âÊÔÓÃÀýÔÚÉÏÃæÊ×ÏÈ˵Ã÷ÁËÕâÊÇÒ»¸ö¼ÆËã
n ´Î·½µÄ feature£¬ÁíÍ⻹¼òµ¥ËµÃ÷ÁË×÷Õߣ¬Ä¿µÄµÈ£¬×îÖØÒªµÄÊÇÓà 3 ¸ö²½ÖèºÜÇå³þµÄÃèÊöÁËÒ»¸öÓû§³¡¾°£¬¼´
1 µÄ 0 ´Î·½Îª 1
ͼ 10 ²âÊÔÓÃÀýÃèÊö
²»ÓÃÔÙ¶à˵£¬Ïë±Ø´ó¼ÒÒѾ¸ÐÊܵ½ÕâÑùµÄ²âÊÔÓÃÀýµÄºÃ´¦£¬¼òµ¥Ã÷ÁË£¬Ò×¶ÁÐԸߣ¬ÐÅÏ¢Á¿´ó£¬±ãÓÚά»¤¡£µ±È»µ½´ËΪֹ£¬Õâ¸ö¿´ÉÏÈ¥ºÜÇåÎúÃ÷Á˵IJâÊÔÓÃÀýÖ»ÊǶÔÓû§À´ËµÊÇÕâÑùµÄ£¬¼ÆËã»úÊÇÈçºÎÀí½âµÄÄØ£¿Õâ¾ÍÐèÒªÎÒÃǶÔÕâЩ
step ×öת»»£¬´Ó¶øÊ¹³ÌÐòÕýÈ·Àí½âÓû§ÐÐΪ¡£ÈçÏÂËùʾÎÒÃǶ¨ÒåÁËÒ»¸ö½âÊͽű¾ step.py£º
ͼ 11 ½âÊͽű¾
Õâ¸ö step.py ÐèÒªºÍÇ°ÃæµÄ²âÊÔÓÃÀý computePow.feature ½áºÏÀ´¿´£¬Ê×ÏÈ step.py
ÀïÃæ¶¨ÒåÁË 3 ¸ö·½·¨£¬Ã¿¸ö·½·¨ÊÇºÍ factorial.feature ÎļþÀïÃæµÄÓû§³¡¾°µÄÿһ¸ö²½Öè¶ÔÓ¦£¬¶øÕâ¸ö¶ÔÓ¦¹æÔò¾ÍÊÇ¿¿·½·¨ÉÏÃæµÄ
@step(...) Ëù±êʶµÄÕýÔò±í´ïʽÀ´Æ¥ÅäµÄ£¬ÆäÖÐÓÐÕýÔò±í´ïʽµÄµØ·½£¬Èç (\d+)£¬±íʾÊDzÎÊý´øÈ룬±ÈÈçÔÚ·½·¨
have_the_number ÖУ¬ÉÏÃæµÄÆ¥Å乿ÔòÓÐÁ½¸ö (\d+)£¬±íʾÕâÀïÓÐÁ½¸öÊý×Ö²ÎÊý£¬Òò´Ë¸Ã·½·¨Ò²´øÁËÁ½¸öÐÎʽ²ÎÊý
bottomnumber ºÍ uppernumber¡£ÔËÐÐʱ£¬ÕâÁ½¸ö²ÎÊýÖµ½«´Ó²âÊÔÓÃÀý¶ÔÓ¦µÄ step
ÖлñÈ¡£¬¼´ Given I have the bottomnumber 1 and the uppernumber
0£¬Ò²¾ÍÊÇ˵ʵ¼Ê²ÎÊý½«ÊÇ 1 ºÍ 0¡£ÁíÍâÐèҪעÒâµÄÊÇÎÒÃÇÇ¿ÁÒÖ§³Ö´úÂëµÄ¿É¶ÁÐÔ£¬Òò´ËÕâÀï step.py
Öеķ½·¨Ãû¶¼ºÜÈÝÒ×Àí½â¡£
ºÃÁË£¬ÖÁ´ËÒ»Ìõ¼òµ¥µÄ²âÊÔÓÃÀýÒѾÍê³É£¬ÎÒÃÇÀ´ÈÃËüÔËÐÐһϣ¬½øÈëµ½ÎļþËùÔÚĿ¼£¬Ê¹ÓÃÃüÁlettuce
computePow.feature£¬ÔËÐнá¹ûÈçÏÂͼËùʾ¡£
ͼ 12 ÔËÐвâÊÔÓÃÀý
ÔËÐнá¹ûÏÔʾ£¬×ܹ²ÔËÐÐÁËÒ»¸ö feature ºÍÒ»¸ö scenario£¬¶¼ÔËÐÐʧ°Ü£¬scenario Öй²ÓÐ
3 ¸ö step£¬ ÆäÖÐ 2 ¸ö³É¹¦ÔËÐУ¬»¹ÓÐÒ»¸öʧ°Ü£¬´ÓͼÖпÉÒÔ¿´µ½Ê§°ÜµÄµØ·½ÒÔ¼°¾ßÌå¶ÑÕ»ÐÅÏ¢¡£
´ÓÕâÀï¾Í¿ÉÒÔÌå»á BDD µÄºÃ´¦£¬¶ÔÓÚ²âÊÔÈËÔ±À´ËµÄܺÜÇå³þµÄÃ÷°×ÎÊÌâ³öÔÚÄÄÒ»²½£¬¿ÉÒÔÕÒËÈ¥¹µÍ¨£»¶øÕâЩ´íÎóÐÅÏ¢Ò²ÄܺܺõİïÖú¿ª·¢ÈËÔ±½â¾öÎÊÌ⣻ÁíÍâÏÂÃæµÄͳ¼ÆÊý×ÖÒ²ÄܺÜÇå³þµØ¿´µ½²âÊÔͨ¹ý°Ù·Ö±È¡£
¼ÈÈ»²âÊÔÓÃÀýÅÜʧ°ÜÁË£¬½ÓÏÂÀ´ÎÒÃǾÍÐ޸ĴúÂëÈÃÓÃÀý³É¹¦ÅÜͨ¡£Í¨¹ýÊýѧ¼ÆË㣬ÎÒÃÇÖªµÀ
1 µÄ 0 ´Î·½ÊÇ 1£¬Òò´ËÎÒÃÇÐ޸ļÆËã³ÌÐò computePow.py£¬ÈÃËü·µ»Ø 1£¬ÐÞ¸ÄÍêÖ®ºóÔËÐÐһϣ¬·¢ÏÖÕâʱ²âÊÔÓÃÀýÒѾÍêÈ«Åܹý¡£ÈçÏÂËùʾ£º
ͼ 13 Ð޸ĺó¼ÆËã³ÌÐò½Ó¿Ú

ͼ 14 ÔÙ´ÎÔËÐвâÊÔÓÃÀý
µü´ú 2
½ÓÏÂÀ´£¬ÎÒÃǾͿÉÒÔ¿¼ÂÇÀ©Õ¹²âÊÔÓÃÀý£¬ÎªÈòâÊÔ¸üÍ걸£¬ÔÚÕâÀïÎÒÃÇÔö¼ÓÁË 3 ¸ö¼ÆË㣬·Ö±ðÊÇ 3 µÄ 0 ´Î·½Îª
1£¬2 µÄ 1 ´Î·½Îª 2 ºÍ 5 µÄ 0 ´Î·½Îª 5£¬ÐÂÔöÓÃÀýÈçÏÂËùʾ£º
ͼ 15 ²âÊÔÓÃÀý¹¦ÄÜÀ©Õ¹
ÔËÐиÃÓÃÀýÖ®ºó£¬·¢ÏÖÔÚ Scenario: pow(2, 1) ºÍ Scenario: pow(5, 1)
³ö´í£¬ÈçÏÂËùʾ£¬¸Ã´ÎÔËÐÐÓÐ 2 ¸ö scenario ³É¹¦ÔËÐУ¬2 ¸öʧ°Ü£¬´ÓÔËÐнá¹û¿ÉÒÔºÜÈÝÒ×µØÖªµÀÊÇÄÄÒ»¸ö²½Öè³ö´í¡£
ͼ 16 ²âÊÔÓÃÀý¹¦ÄÜÀ©Õ¹ºóÔËÐнá¹û
Òò´ËÎÒÃÇÐ޸ļÆËã³ÌÐò step.py£¬ÈçÏÂËùʾ£º
ͼ 17 µÚ 3 ´ÎÐ޸ļÆËã³ÌÐò½Ó¿Ú
ÔÙ´ÎÔËÐÐÃüÁî lettuce computePow.feature, ·¢ÏÖÎÒÃǵÄÕâ 4 ¸ö Scenario
ºÍ 12 ¸ö step ¶¼Äܳɹ¦Åܹý¡£
µü´ú 3
µ½ÕâÀïÎÒÃDzŲâÊÔÁË 4 ¸ö¼òµ¥ÓÃÀý£¬½ÓÏÂÀ´ÎÒÃÇÔÙÔö¼Ó 2 ¸öÉÔ΢¸´ÔÓЩµÄÓÃÀý£¬¼ÆËã 2 µÄ 3 ´Î·½Îª
8£¬3 µÄ 2 ´Î·½Îª 9£¬ÐÂÔöÓÃÀýÈçÏÂËùʾ£º
ͼ 18 ²âÊÔÓÃÀýµÚ 2 ´Î¹¦ÄÜÀ©Õ¹
ÔËÐиÃÓÃÀýÖ®ºó£¬·¢ÏÖÔÚÐÂÔöµÄ 2 ¸öÓÃÀý´¦ Scenario: pow(2, 3)£¬Scenario:
pow(3, 2) ³ö´í£¬Òò´ËÎÒÃÇÐ޸ļÆËã³ÌÐò computePow.py ÒÔÈÃÓÃÀýͨ¹ý£¬ÈçÏÂËùʾ£º
ͼ 19 µÚ 4 ´ÎÐ޸ļÆËã³ÌÐò½Ó¿Ú
ÔÙ´ÎÔËÐÐÃüÁî lettuce computePow.feature, ·¢ÏÖÎÒÃǵÄÕâ 6 ¸ö Scenario
ºÍ 18 ¸ö step ¶¼ÄÜ˳ÀûÅܹý¡£
µü´ú 4
ÖÁ´ËÎÒÃǵļÆËãÆ÷С³ÌÐòÒѾ˳ÀûÅܹý 6 ¸öÓû§³¡¾°£¬Èç¹ûÔÙÐÂÔöÓÃÀýµÄ»°£¬¾Í¿É·ÂÕÕÉÏÊö 3 ¸öµü´ú¹ý³ÌÀ´Ìí¼Ó£¬µ«ÊÇÕâÓÐÒ»¸öÎÊÌâ£¬Ëæ×ÅÓû§³¡¾°Ôö¶à£¬ÎÒÃÇ·¢ÏÖ
computePow.feature ±äµÄÔ½À´Ô½³¤£¬ÄÑÒÔ¹ÜÀí£¬×Ðϸ¹Û²ìһϣ¬·¢ÏÖÿ¸ö³¡¾°µÄ step ºÜÏàËÆ£¬Ò²¾Í˵ÎÒÃÇдÁ˺ܶàÖØ¸´µÄÃèÊöÐÅÏ¢£¬Õë¶ÔÕâÒ»ÎÊÌ⣬Lettuce
²âÊÔ¿ò¼Ü¿ÉÒÔÓà scenarios outlines À´½â¾ö£¬ÈçÏÂͼËùʾ£º
ͼ 20 ʹÓà scenarios outlines
ÃèÊö²âÊÔÓÃÀý
ÕâÑùµÄд·¨¿ÉÒÔʹ²âÊÔÓÃÀýÔÚÒÀÈ»Äܱí´ï·á¸»µÄÐÅÏ¢µÄÇé¿öϱäµÄºÜ¾«¼ò£¬ÇÒ¸üÈÝÒ×¹ÜÀíºÍÀ©Õ¹¡£
²âÊԽű¾ÔËÐм°×Ô¶¯»¯
²âÊԽű¾ÈçºÎÔËÐÐÔÚǰһÕµÄʵÀýÖÐÒѾÌáµ½£¬Ö»ÐèÒª¼òµ¥ÃüÁî lettuce computePow.feature
¾Í¿ÉÒÔ¡£ÕâÑùËü¾Í»áÔÚµ±Ç°Â·¾¶ÏÂËÑѰÓëÿһ¸ö step Æ¥ÅäµÄ½Å±¾À´½âÊÍÖ´ÐС£×¢ÒâµÄÊÇ£¬ÕâÀïµÄ²âÊÔÓÃÀýºÍ²âÊԽű¾µÄÃû×ÖûÓйØÁªÐÔ¡£Èç¹ûµ±Ç°Â·¾¶ÏÂÓжà¸ö²âÊÔÓÃÀýÎļþ£¬Ò²¾ÍÊÇ˵Óкܶà*.feature
Îļþ£¬¾Í¿ÉÒÔÓà lettuce ./ »òÕß lettuce *.feature À´ÅúÁ¿Ö´ÐС£
µ½´ËÏë±Ø´ó¼ÒÒѾ¶Ô BDD ÔÚ Python ÁìÓòµÄ¿ª·¢²âÊÔ¹ý³ÌÒÔ¼°²âÊÔ¿ò¼Ü´î½¨ÒѾÓÐÒ»¸öÐÎÏóµÄÀí½â£¬ÔÚÇ°ÃæµÄʵÀýÖÐÒ²Ìå»áµ½ÁËÕâÖÖ·½·¨µÄºÃ´¦¡£×îºóÒªÌáµ½µÄ×Ô¶¯»¯ÊµÖÊÉÏÊÇÕâÖÖ·½·¨µÄÁíÍâÒ»¸öºÃ´¦£¬¼ÙÉèÎÒÃǵļÆËãÆ÷³ÌÐò½«·Ö²¼ÓÚ²»Í¬µÄ
OS ÉÏ£¬ÐèÒª¶ÔÕâЩ»·¾³¶¼½øÐвâÊÔ£¬ÓÖ»òÕß˵ÎÒÃǵļÆËãÆ÷³ÌÐòÐèÒªÉý¼¶Óà Python µÄ¸ü¸ß°æ±¾µÈµÈ£¬ÕâÑùÎÒÃǾÍÒª½«²âÊÔ»·¾³ºÍ¿ª·¢»·¾³·ÖÀ룬ÔÚÎÒÃǵݸÀýÖУ¬¿ÉÒÔ¿´µ½²âÊÔÓÃÀýºÍ¼ÆËãÆ÷³ÌÐòÊDZ˴˶ÀÁ¢µÄ£¬ÕâÑùÎÒÃÇÖ»ÓÃ×öºÜÉٵŤ×÷£¬Æ©ÈçдһЩ¼òµ¥µÄ½Å±¾£¬È»ºóÔÚ²âÊÔ»·¾³ÉÏͨ¹ý
set »ò export ÉèÖÃÔ¶³Ì¿ª·¢»·¾³µÄÔËÐбäÁ¿¾ÍÄܺÜÇáÒ×µÄÈÃËü×Ô¶¯»¯ÔËÐС£
×ܽá
±¾ÎÄÊ×ÏȶÔÐÐΪÇý¶¯¿ª·¢×öÁËÒ»¸ö¼ò½é£¬½ÓÏÂÀ´Í¨¹ýʵÀýͼÎIJ¢Ã¯µØ½²ÊöÁËÈçºÎ½«Õâһ˼ÏëÁé»îÔËÓõ½ Python
ÁìÓò£¬Í¬Ê±Öм仹´©²åÁ˲âÊÔ¿ò¼Ü Lettuce µÄ°²×°¼°ÔËÐС£ÔÚ´Ë£¬Ï£Íû±¾ÎÄÄÜÆðµ½Ò»¸öÅ×שÒýÓñµÄ×÷Óã¬Ôö½ø¶ÁÕß¶Ô
Python ºÍ BDD µÄÁ˽⣬ÓÐÐËȤµÄ¶ÁÕß¿ÉÒÔ½øÐÐÉîÈëÑо¿£¬½«ÆäÁé»îÓ¦Óõ½ÏîĿʵ¼ùÖС£
|