Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Èí¼þ²âÊÔ½ð×ÖËþ
 
×÷ÕߣºDevOpsʱ´ú
  3202  次浏览      18
 2020-6-2  
 
±à¼­ÍƼö:
±¾ÎÄ̽ÌÖÁËÈ«ÃæµÄ²âÊÔ×éºÏÓ¦¸ÃÊÇʲôÑùµÄÏìÓ¦£¬¿É¿¿ºÍ¿Éά»¤µÄ-ÎÞÂÛÄãÊÇÔÚ¹¹½¨Î¢·þÎñ¼Ü¹¹£¬Òƶ¯Ó¦Óû¹ÊÇÎïÁªÍøÉú̬ϵͳ¡£ÎÒÃÇ»¹½«Ïêϸ½éÉܹ¹½¨ÓÐЧºÍ¿É¶ÁµÄ×Ô¶¯»¯²âÊÔ¡£
±¾ÎÄÀ´×ÔÓÚÌÚѶÔÆ £¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

¡°²âÊÔ½ð×ÖËþ¡±ÊÇÒ»¸öÒþÓ÷£¬Ëü¸æËßÎÒÃǽ«Èí¼þ²âÊԷֳɲ»Í¬¿ÅÁ£¶ÈµÄÍ°£¬Ò²¸ø³öÁËÎÒÃÇÓ¦¸ÃÔÚÕâЩ×éÖнøÐжàÉٴβâÊÔµÄÏë·¨¡£¾¡¹Ü²âÊÔ½ð×ÖËþµÄ¸ÅÄîÒѾ­´æÔÚÁËÒ»¶Îʱ¼ä£¬µ«ÍŶÓÈÔÈ»ºÜÄÑÕýÈ·µØʵʩ¡£±¾ÎÄÖØÐÂ̽ÌÖÁ˲âÊÔ½ð×ÖËþµÄԭʼ¸ÅÄ²¢Õ¹Ê¾ÁËÈçºÎ½«Æ丶Öîʵ¼ù¡£ÌÖÂÛÄãÓ¦¸ÃÔÚ½ð×ÖËþµÄ²»Í¬²ã´ÎÉÏÑ°ÕÒÄÄÖÖÀàÐ͵IJâÊÔ£¬²¢¸ø³öÁËÈçºÎʵÏÖÕâЩ²âÊÔµÄʵÀý¡£

Ham Vocke

Éú²ú¾ÍÐ÷Èí¼þÔÚͶÈëÉú²ú֮ǰÐèÒª½øÐвâÊÔ¡£

Ëæ×ÅÈí¼þ¿ª·¢¹æÂɵijÉÊ죬Èí¼þ²âÊÔ·½·¨Ò²ÈÕÇ÷³ÉÊì¡£¿ª·¢ÍŶӲ»ÔÙÐèÒª´óÁ¿µÄÊÖ¶¯Èí¼þ²âÊÔÈËÔ±£¬¶øÊǽ«²âÊÔ¹¤×÷×î´ó²¿·Ö×Ô¶¯»¯¡£×Ô¶¯»¯²âÊÔ¿ÉÒÔÈÃÍŶÓÔÚ¶Ìʱ¼äÄÚÖªµÀËûÃǵÄÈí¼þÓÐʲôÎÊÌ⣬¶ø²»ÊǼ¸Ìì»ò¼¸ÖÜ¡£

ÓÉ×Ô¶¯»¯²âÊÔÖúÁ¦µÄËõ¶Ì·´À¡»·Â·ÓëÃô½Ý¿ª·¢Êµ¼ù£¬³ÖÐø½»¸¶ºÍDevOpsÎÄ»¯Ð¯ÊÖ²¢½ø¡£ ²ÉÓÃÓÐЧµÄÈí¼þ²âÊÔ·½·¨£¬ÍŶӿÉÒÔ¿ìËÙ¶ø×ÔÐŵØÐж¯¡£

£¨²âÊÔ£©×Ô¶¯»¯µÄÖØÒªÐÔ

Èí¼þÒѳÉΪÎÒÃÇÉú»îµÄÊÀ½çµÄÖØÒª×é³É²¿·Ö¡£ËüÔçÒѳ¬³öÁËÌá¸ßÆóҵЧÂÊÕâÒ»¸öÄ¿µÄ¡£½ñÌ죬¹«Ë¾¶¼ÊÔͼÏë·½Éè·¨³ÉΪһÁ÷µÄÊý×Ö¹«Ë¾¡£Ëæ×ÅÎÒÃÇÿ¸öÈ˶¼»áÓëÔ½À´Ô½¶àµÄÈí¼þ½øÐн»»¥¡£´´ÐµijµÂÖ»áתµÃ¸ü¿ì¡£

Èç¹ûÄãÏë¸úÉϲ½·¥£¬±ØÐëÑо¿ÈçºÎÔÚ²»ÎþÉüÖÊÁ¿µÄÇé¿öϸü¿ìµØ½»¸¶ÄãµÄÈí¼þ¡£³ÖÐø½»¸¶ÊÇÒ»ÖÖ×Ô¶¯È·±£ÄãµÄÈí¼þ¿ÉÒÔËæʱ·¢²¼µ½Éú²ú»·¾³Öеķ½Ê½£¬¿ÉÒÔΪÄãÌṩ°ïÖú¡£Í¨¹ý³ÖÐø½»¸¶£¬¿ÉÒÔʹÓù¹½¨¹ÜµÀ×Ô¶¯²âÊÔÈí¼þ²¢½«Æ䲿Êðµ½²âÊÔºÍÉú²ú»·¾³ÖС£

ÊÖ¶¯¹¹½¨£¬²âÊԺͲ¿Ê𲻶ÏÔö¼ÓµÄÈí¼þÊýÁ¿ºÜ¿ì¾Í±äµÃ²»¿ÉÄÜÁË-³ý·ÇÄãÏ£Íû½«ËùÓÐʱ¼ä»¨·ÑÔÚÊÖ¶¯£¬Öظ´ÐԵŤ×÷¶ø²»ÊÇÌá¸ß½»¸¶Ð§ÂʵŤ×÷ÉÏ¡£

Figure 1: Use build pipelines to automatically and reliably get your software into production

´«Í³ÉÏ£¬Èí¼þ²âÊÔ¹ýÓÚÊÖ¶¯»¯£¬Í¨¹ý½«Ó¦ÓóÌÐò²¿Êðµ½²âÊÔ»·¾³£¬È»ºóÖ´ÐÐһЩºÚºÐ²âÊÔ£¬ÀýÈ磬ͨ¹ýµã»÷ÄãµÄÓû§½çÃæÀ´²é¿´ÊÇ·ñÓÐÈκÎÎÊÌâ¡£ÕâЩ²âÊÔͨ³£ÓɲâÊԽű¾Ö¸¶¨£¬ÒÔÈ·±£²âÊÔÈËÔ±Äܹ»½øÐÐÒ»ÖÂÐÔ¼ì²é¡£

ºÜÃ÷ÏÔ£¬ÊÖ¶¯²âÊÔËùÓиü¸Ä·Ç³£ºÄʱ£¬Öظ´ÇÒ·¦Î¶¡£Öظ´ÊÇÎÞÁĵģ¬ÎÞÁĻᵼÖ´íÎ󣬲¢Ê¹ÄãÔÚ±¾ÖÜĩ֮ǰѰÕÒ²»Í¬µÄ¹¤×÷¡££¨ÒëÕß×¢£ºÒâ˼¾ÍÊÇû×öÍê¾ÍÕÒ²»Í¬µÄÊÂ×ö£©

ÐÒÔ˵ÄÊÇ£¬¶ÔÓÚÖظ´ÐÔÈÎÎñÓÐÒ»ÖÖ²¹¾È´ëÊ©£º×Ô¶¯»¯¡£

×Ô¶¯»¯Öظ´ÐÔ²âÊÔ¿ÉÒÔ³ÉΪÈí¼þ¿ª·¢ÈËÔ±Éú»îÖеÄÖØ´ó¸Ä±ä¡£Ê¹×Ô¶¯»¯²âÊÔ£¬Äã²»ÔÙÐèҪäĿµØ×ñÑ­µã»÷ЭÒéÀ´¼ì²éÄãµÄÈí¼þÊÇ·ñÈÔÄÜÕý³£¹¤×÷¡£×Ô¶¯»¯ÄãµÄ²âÊÔ£¬Äã¿ÉÒԸıä´úÂë¿â¶ø²»ÓôòÑÛÇò¡£Èç¹ûÄãÔø¾­³¢ÊÔ¹ýÔÚûÓÐÊʵ±µÄ²âÊÔÌ×¼þµÄÇé¿öϽøÐдó¹æÄ£µÄÖع¹£¬ÎÒ¸Ò´ò¶ÄÕâ»áÊÇÒ»¸ö¶àô¿ÉŵÄÌåÑé¡£ ÄãÔõô֪µÀÄãÊÇ·ñÒâÍâµØÆÆ»µÁËijЩ¶«Î÷£¿ÄÇô£¬¾ÍÊÇÄãµã»÷ËùÓеÄÊÖ¶¯²âÊÔÓÃÀý¡£µ«ËµÊµ»°£ºÄãÕæµÄϲ»¶ÕâÑùÂð£¿

ÈçºÎ×ö´ó¹æÄ£µÄ±ä»¯µÄʱºò£¬²¢ÖªµÀÄãÊÇ·ñÔÚ¼¸ÃëÖÓÄÚÆÆ»µÁ˶«Î÷£¬Í¬Ê±ºÈÒ»¿Ú¿§·È£¿Èç¹ûÄãÎÊÎÒ£¬ÕâÑù»á¸üÓä¿ì¡£

²âÊÔ½ð×ÖËþ

Èç¹ûÄãÏëÈÏÕæ¶Ô´ýÈí¼þµÄ×Ô¶¯»¯²âÊÔ£¬Ó¦¸ÃÁ˽âÒ»¸ö¹Ø¼ü¸ÅÄ²âÊÔ½ð×ÖËþ¡£ Âõ¿Ë¡¤¿Æ¶÷ÔÚËûµÄ×Å×÷¡°ÓëÃô½Ý³É¹¦¡±Ò»ÊéÖÐÌá³öÁËÕâ¸ö¸ÅÄî¡£ÕâÊÇÒ»¸öΰ´óµÄÊÓ¾õÒþÓ÷£¬¸æËßÄã˼¿¼²»Í¬²ã´ÎµÄ²âÊÔ¡£Ëü»¹»á¸æËßÄãÔÚÿ¸öͼ²ãÉÏÒª×ö¶àÉÙ²âÊÔ¡£

Figure 2: The Test Pyramid

Mike CohnµÄԭʼ²âÊÔ½ð×ÖËþÓÉÄãµÄ²âÊÔÌ×¼þÓ¦°üº¬µÄÈý¸ö²ã×é³É£¨´Óϵ½ÉÏ£©£º

1¡¢Unit Tests

2¡¢Service Tests

3¡¢User Interface Tests

²»ÐÒµÄÊÇ£¬Èç¹û×Ðϸ¹Û²ì£¬²âÊÔ½ð×ÖËþµÄ¸ÅÄî»áÓеã¶Ì¡£ÓÐÈËÈÏΪ£¬Âó¿Ë¿Æ¶÷µÄ²âÊÔ½ð×ÖËþµÄÃüÃû»òijЩ¸ÅÄî·½Ãæ²¢²»ÀíÏ룬ÎÒ±ØÐëͬÒâ¡£´ÓÏÖ´úµÄ½Ç¶ÈÀ´¿´£¬²âÊÔ½ð×ÖËþËƺõ¹ýÓÚ¼òµ¥»¯£¬Òò´Ë¿ÉÄÜ»á²úÉúÎ󵼡£

¾¡¹ÜÈç´Ë£¬ÓÉÓÚËüµÄ¼òµ¥ÐÔ£¬µ±½¨Á¢×Ô¼ºµÄ²âÊÔÌ×¼þʱ£¬²âÊÔ½ð×ÖËþµÄ±¾ÖÊÊÇÒ»¸öºÜºÃµÄ¾­Ñé·¨Ôò¡£Äã×îºÃµÄÑ¡ÔñÊǼÇסCohn×î³õµÄ²âÊÔ½ð×ÖËþÖеÄÁ½¼þÊ£º

1¡¢Óò»Í¬µÄÁ£¶È±àд²âÊÔ

2¡¢¸ü¸ßµÄ²ã´Î£¬¸üÉٵIJâÊÔ

¼á³Ö½ð×ÖËþÐÎ×´£¬ÒÔÌá³öÒ»¸ö½¡¿µ£¬¿ìËٺͿÉά»¤µÄ²âÊÔÌ×¼þ£ºÐ´Ðí¶àС¶ø¿ìµÄµ¥Ôª²âÊÔ¡£ дһЩ¸ü´ÖÁ£¶ÈµÄ²âÊԺͼõÉٸ߼¶²âÊÔ£¬´ÓÍ·µ½Î²²âÊÔÄãµÄÓ¦ÓóÌÐò¡£ ×¢Ò⣬Äã×îÖÕ²»»áµÃµ½Ò»¸ö²âÊÔ±ùä¿ÁÜ׶£¬Õ⽫ÊÇÒ»¸öجÃÎÀ´Î¬³Ö£¬²¢ÇÒÔËÐÐʱ¼äÌ«³¤¡£

(ÒëÕß×¢£º²âÊÔ±ù¼¤Áè׶µÄʾÒâͼ)

²»ÒªÌ«¾ÐÄàÓڿƶ÷²âÊÔ½ð×ÖËþÖе¥¸öͼ²ãµÄÃû³Æ¡£

ÊÂʵÉÏ£¬ËüÃÇ¿ÉÄÜ»áÒýÆðÎó½â£º·þÎñ²âÊÔÊÇÒ»¸öÄÑÒÔÀí½âµÄÊõÓ¿Æ¶÷±¾ÈË̸Â۵Ĺ۲ì½á¹ûÊÇÐí¶à¿ª·¢ÈËÔ±ÍêÈ«ºöÂÔÁËÕâÒ»²ã£©¡£ÔÚÖîÈçreact£¬angular£¬ember.jsµÈµ¥Ò³ÃæÓ¦ÓóÌÐò¿ò¼ÜµÄÈÕ×ÓÀUI²âÊÔÏÔÈ»²»±ØλÓÚ½ð×ÖËþµÄ×î¸ß²ã - ÔÚÕâЩ¿ò¼ÜÖÐÄãÍêÈ«¿ÉÒÔʹÓõ¥Ôª²âÊÔ²âÊÔÄãµÄUI¡£

¿¼Âǵ½Ô­Ê¼Ãû³ÆµÄȱµã£¬Ö»ÒªÔÚ´úÂë¿âºÍÍŶӵÄÌÖÂÛÖб£³ÖÒ»Ö£¬¾Í¿ÉÒÔΪ²âÊÔͼ²ãÌṩÆäËûÃû³Æ¡£

ÎÒÃÇ»áʹÓõŤ¾ßºÍ¿â

JUnit: test runner

Mockito£ºmocking dependencies

Wiremock£ºÓÃÓÚÌÞ³ýÍⲿ·þÎñ

Pact£ºÓÃÓÚ±àдCDC²âÊÔ

Selenium£ºÓÃÓÚ±àдUIÇý¶¯µÄ¶Ëµ½¶Ë²âÊÔ

REST-assured£ºÓÃÓÚ±àдREST APIÇý¶¯µÄ¶Ëµ½¶Ë²âÊÔ

Ó¦ÓÃÀý×Ó

ÎÒÒѾ­Ð´ÁËÒ»¸ö¼òµ¥µÄ΢·þÎñ£¬°üÀ¨Ò»¸ö²âÊÔÌ×¼þ£¬ÆäÖаüº¬²âÊÔ½ð×ÖËþÖв»Í¬²ã´ÎµÄ²âÊÔ¡£

ʾÀýÓ¦ÓóÌÐòÏÔʾÁ˵äÐ͵Ä΢·þÎñµÄÌØÕ÷¡£

ËüÌṩÁËÒ»¸öREST½Ó¿Ú£¬ÓëÊý¾Ý¿â½»»¥²¢´ÓµÚÈý·½REST·þÎñ»ñÈ¡ÐÅÏ¢¡£

ËüÔÚSpring BootÖÐʵÏÖ£¬¼´Ê¹ÄãÒÔÇ°´ÓδʹÓùýSpring Boot£¬Ò²Ó¦¸Ã¿ÉÒÔÀí½â¡£

ÇëÎñ±Ø²é¿´GithubÉϵĴúÂë¡£

×ÔÊöÎļþ°üº¬ÄúÔÚ¼ÆËã»úÉÏÔËÐÐÓ¦ÓóÌÐò¼°Æä×Ô¶¯»¯²âÊÔËùÐèµÄ˵Ã÷¡£

¹¦ÄÜ

¸ÃÓ¦ÓóÌÐòµÄ¹¦Äܼܺòµ¥¡£ ËüÌṩÁËÒ»¸ö¾ßÓÐÈý¸ö¶ËµãµÄREST½Ó¿Ú£º

GET / hello ·µ»Ø¡°Hello Word¡±. ×ÜÊÇ

GET / hello{lastname} ÓÃÌṩµÄÐÕÊϲéÕÒ¸ÃÈË¡£

Èç¹ûÓÐÕâ¸öÈË£¬Ôò·µ»Ø¡±Hello{Firstname}{Lastname}¡±.

GET /weather ·µ»Øµ±Ç°µÄÌìÆø×´¿ö Hambur, Germany.

¸ß²ã¼¶½á¹¹

Ôڸ߲ã´ÎÉÏ£¬ÏµÍ³¾ßÓÐÒÔϽṹ£º

Figure 3: the high level structure of our microservice system

ÎÒÃǵÄ΢·þÎñÌṩÁËÒ»¸ö¿ÉÒÔͨ¹ýHTTPµ÷ÓõÄREST½Ó¿Ú¡£¶ÔÓÚijЩ¶Ëµã£¬·þÎñ½«´ÓÊý¾Ý¿â»ñÈ¡ÐÅÏ¢¡£ÔÚÆäËûÇé¿öÏ£¬¸Ã·þÎñ½«Í¨¹ýHTTPµ÷ÓÃÍⲿÌìÆøAPIÀ´»ñÈ¡²¢ÏÔʾµ±Ç°ÌìÆø×´¿ö¡£

ÄÚ²¿½á¹¹

ÔÚÄÚ²¿£¬Spring·þÎñÓÐÒ»¸öµäÐ͵ÄSpringÌåϵ½á¹¹£º

Figure 4: the internal structure of our microservice

¿ØÖÆÆ÷ÀàÌṩREST¶Ëµã²¢´¦ÀíHTTPÇëÇóºÍÏìÓ¦

´æ´¢¿âÀàÓëÊý¾Ý¿â½Ó¿Ú²¢¸ºÔðÏò³Ö¾Ã´æ´¢Æ÷дÈëÊý¾ÝºÍ´Ó³Ö¾Ã´æ´¢Æ÷¶ÁÈ¡Êý¾Ý

¿Í»§¶ËÀàÓëÆäËûAPI½»»¥£¬ÔÚÎÒÃǵÄÀý×ÓÖУ¬Ëüͨ¹ýdarksky.net weather APIµÄHTTPS»ñÈ¡JSON

Domain Àಶ׽ÎÒÃǵÄdomain Ä£ÐÍ£¬°üÀ¨ÁìÓòÂß¼­£¨¹«Æ½µØ˵£¬ÔÚÎÒÃǵÄÀý×ÓÖУ¬ÕâÊÇÏ൱΢²»×ãµÀµÄ£©¡£

Óо­ÑéµÄSpring¿ª·¢ÈËÔ±¿ÉÄÜ×¢Òâµ½ÕâÀï¾­³£Ê¹ÓõÄͼ²ãȱʧ£ºÊÜDomain-Driven DesignµÄÆô·¢£¬ºÜ¶à¿ª·¢ÈËÔ±¹¹½¨ÁËÒ»¸öÓÉ·þÎñÀà×é³ÉµÄ·þÎñ²ã¡£ÎÒ¾ö¶¨²»ÔÚ´ËÓ¦ÓóÌÐòÖаüº¬·þÎñ²ã¡£

ÆäÖÐÒ»¸öÔ­ÒòÊÇÎÒÃǵÄÓ¦ÓóÌÐòºÜ¼òµ¥£¬·þÎñ²ã±¾À´¾ÍÊDz»±ØÒªµÄ¼ä½Ó²ã¡£ ÁíÍâÒ»¸öÊÇÎÒÈÏΪÈËÃǹý¶ÈʹÓ÷þÎñ²ã¡£ÎÒ¾­³£Óöµ½ÔÚ·þÎñÀàÖⶻñÕû¸öÒµÎñÂß¼­µÄ´úÂë¿â¡£ Domain Ä£Ðͽö½ö³ÉΪÊý¾Ý²ã£¬¶ø²»ÊÇÐÐΪ£¨Anemic Domain Model£©¡£

¶ÔÓÚÿһ¸ö²»Æ½·²µÄÓ¦ÓóÌÐòÀ´Ëµ£¬Õâ»áÀ˷ѺܶàDZÄÜÀ´±£³Ö´úÂëµÄ½á¹¹Á¼ºÃºÍ¿É²âÊÔÐÔ£¬²¢ÇÒ²»Äܳä·ÖÀûÓÃÃæÏò¶ÔÏóµÄ¹¦ÄÜ¡£

ÎÒÃǵĴ洢¿â·Ç³£¼òµ¥£¬²¢Ìṩ¼òµ¥µÄCRUD¹¦ÄÜ¡£

ΪÁ˼ò»¯´úÂ룬ÎÒʹÓÃÁËSpring Data¡£Spring DataΪÎÒÃÇÌṩÁËÒ»¸ö¼òµ¥¶øͨÓõÄCRUD´æ´¢¿âʵÏÖ£¬ÎÒÃÇ¿ÉÒÔʹÓÃËüÀ´´úÌæÎÒÃÇ×Ô¼ºµÄʵÏÖ¡£Ëü»¹¸ºÔðΪ²âÊÔÆô¶¯ÄÚ´æÊý¾Ý¿â£¬¶ø²»ÊÇÏñÉú²úÖÐÄÇÑùʹÓÃÕæÕýµÄPostgreSQLÊý¾Ý¿â¡£¿´¿´´úÂë¿â£¬ÈÃ×Ô¼ºÊìϤÄÚ²¿½á¹¹¡£Õâ¶ÔÎÒÃǵÄÏÂÒ»²½½«ÊÇÓÐÓõģº²âÊÔÓ¦ÓóÌÐò£¡

µ¥Ôª²âÊÔ

²âÊÔÌ×¼þµÄ»ù´¡½«Óɵ¥Ôª²âÊÔ×é³É¡£ÄãµÄµ¥Ôª²âÊÔÈ·±£ÄãµÄ´úÂë¿âµÄij¸öµ¥Ôª£¨ÄãµÄÊܲâÖ÷Ì⣩°´Ô¤ÆÚ¹¤×÷¡£µ¥Ôª²âÊÔ¾ßÓвâÊÔÌ×¼þÖÐËùÓвâÊÔµÄ×îС·¶Î§¡£²âÊÔÌ×¼þÖеĵ¥Ôª²âÊÔÊýÁ¿½«Ô¶Ô¶³¬¹ýÈκÎÆäËûÀàÐ͵IJâÊÔ¡£

Figure 5: A unit test typically replaces external collaborators with test doubles

ʲôÊǵ¥Î»?

Èç¹ûÄãÎÊÈý¸ö²»Í¬µÄÈËÔÚµ¥Ôª²âÊÔÖеġ°µ¥Î»¡±ÊÇʲôÒâ˼£¬Äã¿ÉÄÜ»áÊÕµ½Ëĸö²»Í¬µÄ£¬Î¢ÃîµÄ´ð°¸¡£ÔÚÒ»¶¨³Ì¶ÈÉÏ£¬ÕâÊÇÒ»¸öÄã×Ô¼º¶¨ÒåµÄÎÊÌ⣬ûÓбê×¼´ð°¸¡£

Èç¹ûÄãʹÓõÄÊǹ¦ÄÜÓïÑÔ£¬Ò»¸öµ¥Î»ºÜ¿ÉÄÜÊÇÒ»¸öµ¥Ò»µÄ¹¦ÄÜ¡£ÄãµÄµ¥Ôª²âÊÔ½«µ÷ÓþßÓв»Í¬²ÎÊýµÄº¯Êý£¬²¢È·±£Ëü·µ»ØÆÚÍûÖµ¡£ÔÚÃæÏò¶ÔÏóµÄÓïÑÔÖУ¬µ¥Ôª¿ÉÒÔ´Óµ¥Ò»·½·¨µ½Õû¸öÀà¡£

ÉÆÓÚ½»¼ÊºÍ¹Â¶À

ÓÐЩÈËÈÏΪ£¬±»²âÖ÷ÌâµÄËùÓкÏ×÷Õߣ¨ÀýÈç±»²âÊԵĿγ̵÷ÓõÄÆäËûÀࣩ¶¼Ó¦¸ÃÓÃÄ£Äâ»ò´æ¸ù´úÌ棬ÒÔ»ñµÃÍêÃÀµÄ¸ôÀ룬±ÜÃ⸱×÷Óú͸´ÔӵIJâÊÔÉèÖᣠÆäËûÈËÔòÈÏΪֻÓлºÂý»ò¸±×÷ÓýϴóµÄºÏ×÷Õߣ¨ÀýÈ磬·ÃÎÊÊý¾Ý¿â»ò½øÐÐÍøÂçµ÷ÓõÄÀࣩӦ¸Ã±»´æ¸ù»òÄ£Äâ¡£

ż¶û£¬ÈËÃǻὫÕâÁ½ÖÖ²âÊÔ±ê¼ÇΪ¹Â¶ÀµÄµ¥Ôª²âÊÔ£¬²âÊÔ½«ËùÓкÏ×÷ÕߺÍÉç½»µ¥Ôª²âÊÔ´æ´¢ÔÚÔÊÐíÓëÕæÕýºÏ×÷Õß½»Ì¸µÄ²âÊÔÖУ¨Jay FieldsµÄ¡°ÓÐЧµØʹÓõ¥Ôª²âÊÔ¹¤×÷¡±´´ÔìÁËÕâЩÊõÓ¡£Èç¹ûÄãÓпÕÏÐʱ¼ä£¬Äã¿ÉÒÔ´ò¿ª¿´Ò»Ï£¬ÔĶÁ¸ü¶à¹ØÓÚ²»Í¬Ë¼ÏëÁ÷ÅɵÄÓŵãºÍȱµã¡£

ÔÚÒ»Ìì½áÊøʱ£¬¾ö¶¨ÊÇ·ñ½øÐе¥¶ÀµÄ»òÉç½»µ¥Ôª²âÊÔ²¢²»ÖØÒª¡£ÖØÒªµÄÊDZàд×Ô¶¯»¯²âÊÔ¡£¾ÍÎÒ¸öÈ˶øÑÔ£¬ÎÒ·¢ÏÖ×Ô¼ºÒ»Ö±¶¼ÔÚʹÓÃÕâÁ½ÖÖ·½·¨¡£Èç¹ûʹÓÃÕæÕýµÄ·½·¨£¬ºÏ×÷Õß±äµÃÞÏÞΣ¬Îһῶ¿®µØʹÓÃÄ£ÄâºÍ´æ¸ù¡£

Èç¹ûÎÒ¾õµÃ²ÎÓëµÄºÏ×÷ÕßÈÃÎÒ¶Ô²âÊÔ¸üÓÐÐÅÐÄ£¬ÄÇôÎÒÖ»»á½«ÎҵķþÎñµÄ×îÍâÃæµÄ²¿·Ö´æ¸ù¡£

Mocking and Stubbing

MocksºÍStubs ÊÇÁ½ÖÖ²»Í¬ÀàÐ͵ÄTest Doubles£¨²»Ö¹ÕâÁ½ÖÖ£©¡£Ðí¶àÈË¿ÉÒÔ»¥»»µØʹÓÃÊõÓïMockºÍStub¡£ÎÒÈÏΪÔÚÄÔº£Öо«È·±£³ÖÆäÌض¨ÊôÐÔÊǼþºÃÊ¡£ Äã¿ÉÒÔʹÓÃtest doubles À´Ìæ»»ÄãÔÚÉú²úÖÐʹÓõĶÔÏ󣬲¢Ê¹ÓÃÀ´°ïÖúÄã½øÐвâÊÔµÄʵÏÖ¡£¼ò¶øÑÔÖ®£¬ËüÒâζ×ÅÓÃÒ»¸ö¼ÙµÄ°æ±¾Ìæ»»ÁËÒ»¼þÕæʵµÄ¶«Î÷£¨ÀýÈçÒ»¸öÀ࣬ģ¿é»òº¯Êý£©¡£¼ÙµÄ°æ±¾¿´ÆðÀ´ºÍÐÐΪÏñÕæʵµÄ¶«Î÷£¨»Ø´ðÏàͬµÄ·½·¨µ÷Óã©£¬µ«ÄãÔÚµ¥Ôª²âÊÔ¿ªÊ¼Ê±×Ô¼º¶¨ÒåµÄÔ¤Éè»ØÓ¦¡£Ê¹ÓÃtest doubles²¢²»Ìض¨ÓÚµ¥Ôª²âÊÔ¡£¸ü¾«Ï¸µÄtest doubles¿ÉÓÃÓÚÒÔÊÜ¿Ø·½Ê½Ä£ÄâϵͳµÄÕû¸ö²¿·Ö¡£È»¶ø£¬ÔÚµ¥Ôª²âÊÔÖУ¬ÄãºÜ¿ÉÄÜ»áÓöµ½ºÜ¶àmockºÍstubs£¨È¡¾öÓÚÄãÊǺÏ×÷»ò¶ÀÁ¢µÄ¿ª·¢ÈËÔ±£©£¬Ö»ÊÇÒòΪºÜ¶àÏÖ´úÓïÑԺͿâÈÃÉèÖñäµÃ¼òµ¥ºÍÊæÊÊ¡£

ÎÞÂÛÄãÑ¡ÔñºÎÖÖ¼¼Êõ£¬ºÜ¿ÉÄÜÓïÑÔ±ê×¼¿â»òһЩÁ÷ÐеĵÚÈý·½¿â½«ÌṩÓÅ»¯µÄ°²×°Ä£Äâ·½·¨¡£ ÉõÖÁ´ÓÍ·¿ªÊ¼±àдÄã×Ô¼ºµÄÄ£ÄâÖ»ÊÇдһ¸ö¼ÙµÄÀà/Ä£¿é/¹¦ÄÜÓëÕæʵµÄÏàͬµÄÇ©Ãû£¬²¢ÔÚ²âÊÔÖÐÉèÖüٵÄÀà¡£

µ¥Ôª²âÊÔÔËÐÐËٶȷdz£¿ì¡£ÔÚһ̨״¿öÁ¼ºÃµÄ»úÆ÷ÉÏ£¬Äã¿ÉÒÔÔÚ¼¸·ÖÖÓÄÚÍê³ÉÊýǧ¸öµ¥Ôª²âÊÔ¡£µ¥¶À²âÊÔС²¿·Ö´úÂë¿â£¬±ÜÃâÁ´½ÓÊý¾Ý¿â£¬Îļþϵͳ»ò´¥·¢HTTP²éѯ£¨Í¨¹ýʹÓÃÕâЩ²¿·ÖµÄmockºÍstub£©À´±£³Ö²âÊԵĿìËÙ¡£

Ò»µ©ÕÆÎÕÁ˱àдµ¥Ôª²âÊÔµÄÇÏÃÅ£¬Ä㽫»áÔ½À´Ô½Á÷ÀûµØ±àд¡£

ÌÞ³ýÍⲿЭ×÷Õߣ¬ÉèÖÃһЩÊäÈëÊý¾Ý£¬µ÷ÓòâÊÔÖ÷Ìâ²¢¼ì²é·µ»ØµÄÖµÊÇ·ñÓëÔ¤ÆÚÏà·û¡£ ¿´¿´²âÊÔÇý¶¯¿ª·¢£¬Èõ¥Ôª²âÊÔÖ¸µ¼ÄãµÄ¿ª·¢; Èç¹ûÕýÈ·Ó¦Óã¬Ëü¿ÉÒÔ°ïÖúÄã½øÈëÒ»¸öÁ¼ºÃµÄÁ÷³Ì£¬²¢Ìá³öÁ¼ºÃµÄ¿Éά»¤Éè¼Æ£¬Í¬Ê±×Ô¶¯Éú³ÉÈ«ÃæµÄÈ«×Ô¶¯²âÊÔÌ×¼þ¡£¾¡¹ÜÈç´Ë£¬Õâ²»ÊÇÒøµ¯¡£»¹Òª¼ÌÐø£¬³¢ÊÔһϣ¬¿´¿´ËüÊÇ·ñÊʺÏÄã¡£

ÎÒÕæµÄÐèÒª²âÊÔÕâÖÖ˽Óз½·¨Âð£¿

Èç¹ûÄã·¢ÏÖ×Ô¼ºÕæµÄÐèÒª²âÊÔ˽Óз½·¨£¬ÄÇôÄãÓ¦¸ÃÍ˺óÒ»²½£¬ÎÊ×Ô¼ºÎªÊ²Ã´¡£

ÎÒºÜÈ·¶¨ÕâÊÇÒ»¸öÉè¼ÆÎÊÌ⣬¶ø²»ÊÇÒ»¸ö·¶Î§ÎÊÌâ¡£ºÜ¿ÉÄÜÄã¾õµÃÐèÒª²âÊÔÒ»¸ö˽Óз½·¨£¬ÒòΪËüºÜ¸´ÔÓ£¬²¢ÇÒͨ¹ý¸ÃÀàµÄ¹«¹²½Ó¿ÚÀ´²âÊÔÕâ¸ö·½·¨ÐèÒªºÜ¶àÞÏÞεÄÉèÖá£

ÿµ±ÎÒ·¢ÏÖ×Ô¼º´¦ÓÚÕâÖÖ×´¿öʱ£¬ÎÒͨ³£»áµÃ³ö½áÂÛ£¬ÎÒÕýÔÚ²âÊÔµÄÕâ¸öÀàÒѾ­Ì«¸´ÔÓÁË¡£ Ëü×öµÃÌ«¶à£¬Î¥·´Á˵¥Ò»ÔðÈÎÔ­Ôò¡ªSOLIDÔ­ÔòÖеÄS¡£

¶ÔÎÒ¶øÑÔ£¬½â¾ö·½°¸Í¨³£Êǽ«Ô­Ê¼Àà·Ö³ÉÁ½¸öÀà¡£ ͨ³£Ö»ÐèÒªÒ»Á½·ÖÖÓµÄ˼¿¼£¬¾Í¿ÉÒÔÕÒµ½Ò»ÖÖ°ÑÒ»¸ö´ó°à¼¶·Ö³ÉÁ½¸öС°à²¢ÓиöÈËÔðÈεĺð취¡£ ÎÒ½«Ë½Óз½·¨£¨ÎÒÆÈÇÐÏëÒª²âÊÔ£©Òƶ¯µ½ÐÂÀàÖУ¬²¢ÈþÉÀàµ÷ÓÃз½·¨¡£ Voil¨¤£¬ÎÒÄÑÒÔ²âÊÔµÄ˽Óз½·¨ÏÖÔÚÊǹ«¿ªµÄ£¬¿ÉÒÔºÜÈÝÒ׵زâÊÔ¡£×îÖØÒªµÄÊÇ£¬ÎÒ¼á³Öµ¥Ò»ÔðÈÎÔ­Ôò¸Ä½øÁËÎҵĴúÂë½á¹¹¡£

²âÊÔʲô£¿

µ¥Ôª²âÊԵĺô¦ÔÚÓÚ£¬Äã¿ÉÒÔΪËùÓÐÉú²ú´úÂëÀà±àдµ¥Ôª²âÊÔ£¬¶ø²»¹ÜËüÃǵŦÄÜ»òÄÚ²¿½á¹¹ÊôÓÚÄĸö²ã¡£Äã¿ÉÒÔÏñ²âÊÔ´æ´¢¿â£¬ÓòÀà»òÎļþ¶ÁÈ¡Æ÷Ò»Ñùµ¥Ôª²âÊÔ¿ØÖÆÆ÷¡£ Ö»Ðè¼á³Öone test class per production class£¬Äã¾ÍÓÐÁËÒ»¸öÁ¼ºÃµÄ¿ª¶Ë¡£

µ¥Ôª²âÊÔÀàÓ¦¸Ã²âÊÔ¸ÃÀàµÄ¹«¹²½Ó¿Ú¡£

˽Óз½·¨ÎÞ·¨½øÐвâÊÔ£¬ÒòΪÄãÎÞ·¨´Ó²»Í¬µÄ²âÊÔÀàÖе÷ÓÃËüÃÇ¡£ Êܱ£»¤µÄ»ò˽Óеİü¿ÉÒÔ´Ó²âÊÔÀà·ÃÎÊ£¨¿¼Âǵ½²âÊÔÀàµÄ°ü½á¹¹ÓëÉú²úÀàÏàͬ£©£¬µ«²âÊÔÕâЩ·½·¨¿ÉÄÜÒѾ­Ì«¹ýÁË¡£

±àдµ¥Ôª²âÊÔʱÓÐÒ»ÌõϸÏߣºËüÃÇÓ¦¸ÃÈ·±£²âÊÔËùÓв»ÖØÒªµÄ´úÂë·¾¶£¨°üÀ¨¿ªÐÄ·¾¶ºÍ±ßÔµÇé¿ö£©¡£Í¬Ê±ËüÃDz»Ó¦¸ÃÓëÄãµÄʵÏÖ¹ýÓÚ½ôÃÜÏà¹Ø¡£

Ϊʲô»áÕâÑù£¿

Ì«½Ó½üÉú²ú´úÂëµÄ²âÊԺܿì±äµÃÁîÈËÌÖÑá¡£

Ö»ÒªÖع¹Éú²ú´úÂ루¿ìËٻعˣºÖع¹Òâζןü¸Ä´úÂëµÄÄÚ²¿½á¹¹¶ø²»¸ü¸ÄÍⲿ¿É¼ûÐÐΪ£©£¬ÄãµÄµ¥Ôª²âÊÔ½«»áÖжϡ£

ÕâÑùÄã¾ÍʧȥÁ˵¥Ôª²âÊÔµÄÒ»´óºÃ´¦£º³äµ±´úÂë±ä¸üµÄ°²È«Íø¡£ÄãÄþÔ¸Ñá¾ëÄÇЩÿ´ÎÖع¹¶¼»áʧ°ÜµÄÓÞ´À²âÊÔ£¬Õâ»áµ¼Ö¸ü¶àµÄ¹¤×÷¶ø²»ÊÇ°ïÖú;¶øÇÒÆäËûÈË»áÏë˭дÕâ¸öÓÞ´ÀµÄ²âÊÔ£¿

Äã¸Ã×öʲôÄØ£¿²»ÒªÔÚÄãµÄµ¥Ôª²âÊÔÖз´Ó³ÄãµÄÄÚ²¿´úÂë½á¹¹£¬·´¶ø²âÊÔ¹Û²ìÐÐΪ¡£½«

Èç¹ûÎÒÈçÊýÖµ x ºÍ y, ½á¹û»áÊÇ z Âð£¿

´úÌæΪ

Èç¹ûÎÒÊäÈëxºÍy£¬¸Ã·½·¨»áÏȵ÷ÓÃÀàA£¬È»ºóµ÷ÓÃÀàB£¬È»ºó·µ»ØÀàAµÄ½á¹û¼ÓÉÏÀàBµÄ½á¹û£¿

˽Óз½·¨Í¨³£Ó¦±»ÊÓΪʵʩϸ½Ú¡£

Õâ¾ÍÊÇΪʲôÄãÉõÖÁ²»Ó¦¸ÃÓÐÊÔ̽ËûÃǵij嶯¡£

ÎÒ¾­³£Ìýµ½µ¥Ôª²âÊÔ£¨»òTDD£©µÄ·´¶ÔÕßÈÏΪ±àдµ¥Ôª²âÊÔÊǺÁÎÞÒâÒåµÄ¹¤×÷£¬ÒòΪÄã±ØÐë²âÊÔËùÓеķ½·¨²ÅÄÜÌá¸ß²âÊÔ¸²¸ÇÂÊ¡£

ËûÃǾ­³£ÒýÓÃÒ»¸öÇé¾°£º¹ýÓÚÈÈÐĵÄÍŶÓÁìµ¼ÆÈʹËûÃÇΪgetterºÍsetterÒÔ¼°ËùÓÐÆäËûÖÖÀà·±ËöµÄ´úÂë±àдµ¥Ôª²âÊÔ£¬ÒÔ±ãÌṩ100£¥µÄ²âÊÔ¸²¸ÇÂÊ¡£

ÕâÓÐÌ«¶àµÄ´íÎó¡£

Êǵģ¬ÄãÓ¦¸Ã²âÊÔ¹«¹²½Ó¿Ú¡£µ«¸üÖØÒªµÄÊÇ£¬Äã²»Òª²âÊÔ²»ÖØÒªµÄ´úÂë¡£ ±ðµ£ÐÄ£¬Kent Beck˵û¹Øϵ¡£Äã²»»á´Ó²âÊÔ¼òµ¥µÄgetter»òsetter»òÆäËû²»ÖØÒªµÄʵÏÖ£¨ÀýÈçûÓÐÈκÎÌõ¼þÂß¼­£©ÖлñµÃÈκζ«Î÷¡£

½Úʡʱ¼ä£¬ÕâÊÇÄã¿ÉÒԲμӵÄÓÖÒ»´Î»áÒ飬ÍòË꣡

²âÊԽṹ

ËùÓвâÊÔµÄÁ¼ºÃ½á¹¹£¨Õâ²»½öÏÞÓÚµ¥Ôª²âÊÔ£©ÊÇÕâÑùµÄ£º

1¡¢ÉèÖòâÊÔÊý¾Ý

2¡¢ÔÚ²âÊÔÖе÷ÓÃÄãµÄ·½·¨

3¡¢¶ÏÑÔÔ¤ÆڵĽá¹û±»·µ»Ø

¼ÇסÕâÖֽṹÓÐÒ»¸öºÜºÃµÄÖú¼Ç·û£º¡°ÅÅÁУ¬Ðж¯£¬¶ÏÑÔ¡±£¨Arrange, Act, Assert£©¡£ ÁíÒ»¸öÄã¿ÉÒÔʹÓõÄÁé¸ÐÀ´×ÔBDD¡£

ËüÊÇ¡°¸ø¶¨¡±(given)£¬¡°µ±¡±(when)£¬¡°È»ºó¡±(then)ÈýºÏÒ»£¬¸ø³ö·´Ó³ÁËÉèÖ㬵±·½·¨µ÷Óã¬È»ºó¶ÏÑÔ²¿·Ö¡£

ÕâÖÖģʽҲ¿ÉÒÔÓ¦ÓÃÓÚÆäËû¸ü¸ß¼¶±ðµÄ²âÊÔ¡£

ÔÚÈκÎÇé¿öÏ£¬ËûÃǶ¼ÄÜÈ·±£ÄãµÄ²âÊÔ±£³Ö¼òµ¥ºÍÒ»ÖµÄÔĶÁ¡£³ý´ËÖ®Í⣬¿¼Âǵ½ÕâÖֽṹµÄ²âÊÔÍùÍù¸ü¶Ì£¬¸ü¾ß±íÏÖÁ¦¡£

רҵµÄ²âÊÔÖúÊÖ

ÎÞÂÛÔÚÓ¦ÓóÌÐòÌåϵ½á¹¹µÄÄÄÒ»²ã£¬Ä㶼¿ÉÒÔΪÕû¸ö´úÂë¿â±àдµ¥Ôª²âÊÔ£¬ÕâÊÇÒ»¼þÃÀÃîµÄÊÂÇé¡£¸ÃʾÀýÏÔʾÁ˶ԿØÖÆÆ÷µÄ¼òµ¥µ¥Ôª²âÊÔ¡£²»ÐÒµÄÊÇ£¬µ±Ì¸µ½SpringµÄ¿ØÖÆÆ÷ʱ£¬ÕâÖÖ·½·¨ÓÐÒ»¸öȱµã£ºSpring MVCµÄ¿ØÖÆÆ÷´óÁ¿Ê¹ÓÃ×¢ÊÍÀ´ÉùÃ÷ËûÃÇÕýÔÚ¼àÌýÄÄЩ·¾¶£¬Ê¹ÓÃÄÄЩHTTP¶¯´Ê£¬ËûÃÇ´ÓURL·¾¶½âÎöÄÄЩ²ÎÊý»òÕß²éѯ²ÎÊýµÈµÈ¡£ÔÚµ¥Ôª²âÊÔÖмòµ¥µØµ÷ÓÃÒ»¸ö¿ØÖÆÆ÷µÄ·½·¨½«²»»á²âÊÔËùÓÐÕâЩ¹Ø¼üµÄÊÂÇé¡£ÐÒÔ˵ÄÊÇ£¬SpringµÄ¹±Ï×ÕßÌá³öÁËÒ»¸öºÜºÃµÄ²âÊÔÖúÊÖ£¬¿ÉÒÔÓÃËüÀ´±àд¸üºÃµÄ¿ØÖÆÆ÷²âÊÔ¡£È·±£¼ì²é³öMockMVC¡£Ëü¸øÄãÒ»¸öºÜºÃµÄDSL£¬Äã¿ÉÒÔʹÓÃËüÀ´¶ÔÄãµÄ¿ØÖÆÆ÷·¢³ö¼ÙµÄÇëÇ󣬲¢¼ì²éÒ»Çж¼Ã»ÎÊÌâ¡£ÎÒÔÚʾÀý´úÂë¿âÖаüº¬ÁËÒ»¸öʾÀý¡£ºÜ¶à¿ò¼Ü¶¼ÌṩÁ˲âÊÔÖúÊÖÀ´Ê¹²âÊÔ´úÂë¿âµÄijЩ·½Ãæ¸ü¼ÓÓä¿ì¡£²é¿´ÄãÑ¡ÔñµÄ¿ò¼ÜµÄÎĵµ£¬¿´¿´ËüÊÇ·ñΪÄãµÄ×Ô¶¯»¯²âÊÔÌṩÁËÓÐÓõİïÖú¡£

ʵʩµ¥Ôª²âÊÔ

ÏÖÔÚÎÒÃÇÖªµÀÒª²âÊÔʲôÒÔ¼°ÈçºÎ¹¹½¨µ¥Ôª²âÊÔ£¬ÖÕÓÚ¿ÉÒÔ¿´µ½Ò»¸öÕæʵµÄÀý×Ó¡£

ÎÒÃÇÀ´¿´Ò»¸öExampleControllerÀàµÄ¼ò»¯°æ±¾£º

hello£¨lastname£©·½·¨µÄµ¥Ôª²âÊÔÈçÏÂËùʾ£º

ÎÒÃÇÕýÔÚʹÓÃJUnit±àдµ¥Ôª²âÊÔ£¬ÕâÊÇJavaÊÂʵÉϵıê×¼²âÊÔ¿ò¼Ü¡£ ÎÒÃÇʹÓÃMockitoÀ´Ìæ»»ÕæÕýµÄPersonRepositoryÀàºÍstubÒÔ¹©ÎÒÃDzâÊÔ¡£ Õâ¸östubÔÊÐíÎÒÃǶ¨ÒåÔÚÕâ¸ö²âÊÔÖдæ¸ù·½·¨Ó¦¸Ã·µ»ØµÄ¹ÞÍ·ÏìÓ¦¡£

StubʹÎÒÃǵIJâÊÔ¸ü¼Ó¼òµ¥£¬¿ÉÔ¤²â£¬²¢ÇÒʹÎÒÃÇÄܹ»ÇáËÉÉèÖòâÊÔÊý¾Ý¡£

ÔÚ°²ÅÅ(arrange)£¬Ðж¯(act)£¬¶ÏÑÔ(assert)½á¹¹Ö®ºó£¬ÎÒÃDZàдÁËÁ½¸öµ¥Ôª²âÊÔ - Ò»¸öÕýÃæµÄ°¸ÀýºÍÒ»¸ö±»ËѲéµÄÈËÎÞ·¨ÕÒµ½µÄ°¸Àý¡£

µÚÒ»¸öÕýÃæµÄ²âÊÔÓÃÀý´´½¨Ò»¸öеÄÈËÎï¶ÔÏ󣬲¢¸æËßÄ£Äâ´æ´¢¿âÔÚÓá°Pan¡±×÷ΪlastName²ÎÊýµÄÖµµ÷ÓÃʱ·µ»Ø¸Ã¶ÔÏó¡£

²âÊÔÈ»ºó¼ÌÐøµ÷ÓÃÓ¦¸Ã²âÊԵķ½·¨¡£ ×îºóËü¶ÏÑÔ·µ»ØÖµµÈÓÚÔ¤Æڵķµ»ØÖµ¡£

µÚ¶þ¸ö²âÊԵŤ×÷Ô­ÀíÀàËÆ£¬µ«ÔÚ³¡¾°ÖУ¬²âÊÔ·½·¨Î´ÕÒµ½¸ø¶¨²ÎÊýµÄÈË¡£

¼¯³É²âÊÔ

ËùÓзÇƽ·²µÄÓ¦ÓóÌÐò¶¼½«ÓëÆäËû²¿·Ö£¨Êý¾Ý¿â£¬Îļþϵͳ£¬¶ÔÆäËûÓ¦ÓóÌÐòµÄÍøÂçµ÷Ó㩼¯³ÉÔÚÒ»Æð¡£

ÔÚ±àдµ¥Ôª²âÊÔʱ£¬ÕâЩͨ³£ÊÇÄãΪÁËÌṩ¸üºÃµÄ¸ôÀëºÍ¸ü¿ìµÄ²âÊÔ¶øÒÅ©µÄ²¿·Ö¡£ ¾¡¹ÜÈç´Ë£¬Ó¦ÓóÌÐòÈÔ»áÓëÆäËû²¿·Ö½øÐн»»¥£¬²¢ÐèÒª½øÐвâÊÔ¡£¼¯³É²âÊÔ¿ÉÒÔ°ïÖúÄã¡£ËûÃÇ»á²âÊÔÓ¦ÓóÌÐòÓëÓ¦ÓóÌÐòÖ®ÍâµÄËùÓв¿·ÖµÄ¼¯³É¡£

¶ÔÓÚ×Ô¶¯»¯²âÊÔ£¬ÕâÒâζ×Ų»½öÐèÒªÔËÐÐÓ¦ÓóÌÐò£¬»¹ÐèÒªÔËÐÐÕýÔÚÓëÖ®¼¯³ÉµÄ×é¼þ¡£ Èç¹ûÄãÕýÔÚ²âÊÔÓëÊý¾Ý¿âµÄ¼¯³É£¬ÔòÐèÒªÔÚÔËÐвâÊÔʱÔËÐÐÊý¾Ý¿â¡£ ΪÁ˲âÊÔÄã¿ÉÒÔ´Ó´ÅÅ̶ÁÈ¡Îļþ£¬ÐèÒª½«Îļþ±£´æµ½´ÅÅ̲¢½«Æä¼ÓÔص½¼¯³É²âÊÔÖС£

ÎÒ֮ǰÌáµ½¡°µ¥Ôª²âÊÔ¡±ÊÇÒ»¸öÄ£ºýµÄÊõÓ¶ÔÓÚ¡°¼¯³É²âÊÔ¡±À´Ëµ¸üÊÇÈç´Ë¡£¶ÔÓÚijЩÈËÀ´Ëµ£¬¼¯³É²âÊÔÒâζ×ÅÒª²âÊÔÕû¸öÓ¦ÓóÌÐò¶ÑÕ»ÓëϵͳÖеÄÆäËûÓ¦ÓóÌÐòÁ¬½Ó¡£ÎÒϲ»¶¸üÏÁÕ­µØ¶Ô´ý¼¯³É²âÊÔ£¬²¢ÇÒÒ»´Î²âÊÔÒ»¸ö¼¯³Éµã£¬Í¨¹ý½«test doublesÌ滻Ϊµ¥¶ÀµÄ·þÎñºÍÊý¾Ý¿â¡£ ½áºÏºÏͬ²âÊԺͶÔtest doublesÔËÐкÏͬ²âÊÔÒÔ¼°Õæʵʵʩ£¬Äã¿ÉÒÔÌá³ö¸ü¿ì£¬¸ü¶ÀÁ¢²¢ÇÒͨ³£¸üÈÝÒ×ÍÆÀíµÄ¼¯³É²âÊÔ¡£

ÏÁÕ­µÄ¼¯³É²âÊÔ»îÔÚÄã·þÎñµÄ±ß½ç¡£

´Ó¸ÅÄîÉϽ²£¬ËüÃÇʼÖÕÊÇ´¥·¢Ò»ÖÖµ¼ÖÂÓëÍⲿ²¿·Ö£¨Îļþϵͳ£¬Êý¾Ý¿â£¬µ¥¶À·þÎñ£©¼¯³ÉµÄ²Ù×÷¡£ Êý¾Ý¿â¼¯³É²âÊÔ¿´ÆðÀ´ÏñÕâÑù£º

Figure 6: A database integration test integrates your code with a real database

1¡¢Æô¶¯Ò»¸öÊý¾Ý¿â

2¡¢½«ÄãµÄÓ¦ÓóÌÐòÁ¬½Óµ½Êý¾Ý¿â

3¡¢ÔÚ´úÂëÖд¥·¢Ò»¸ö½«Êý¾ÝдÈëÊý¾Ý¿âµÄº¯Êý

4¡¢Í¨¹ý¶ÁÈ¡Êý¾Ý¿âÖеÄÊý¾ÝÀ´¼ì²éÔ¤ÆÚÊý¾ÝÊÇ·ñдÈëÁËÊý¾Ý¿â

ÁíÒ»¸öÀý×Ó£¬²âÊÔÄãµÄ·þÎñͨ¹ýREST APIÓëµ¥¶ÀµÄ·þÎñ¼¯³É¿ÉÄÜÊÇÕâÑùµÄ£º

Figure 7: This kind of integration test checks that your application can communicate with a separate service correctly

1¡¢¿ªÊ¼ÄãµÄÉêÇë

2¡¢Æô¶¯µ¥¶À·þÎñµÄÒ»¸öʵÀý£¨»òÕß¾ßÓÐÏàͬ½Ó¿ÚµÄtest double£©

3¡¢ÔÚÄãµÄ´úÂëÖд¥·¢Ò»¸ö´Ó¶ÀÁ¢·þÎñµÄAPIÖжÁÈ¡µÄº¯Êý

4¡¢¼ì²éÄãµÄÓ¦ÓóÌÐòÊÇ·ñ¿ÉÒÔÕýÈ·½âÎöÏìÓ¦

ÄãµÄ¼¯³É²âÊÔ - ±ÈÈçµ¥Ôª²âÊÔ - ¿ÉÒÔÊÇÏ൱Óڰ׺С£

ÓÐЩ¿ò¼ÜÔÊÐíÄãÆô¶¯Ó¦ÓóÌÐò£¬Í¬Ê±ÈÔÈ»¿ÉÒÔÄ£ÄâÓ¦ÓóÌÐòµÄÆäËû²¿·Ö£¬ÒÔ±ã¼ì²éÊÇ·ñ·¢ÉúÁËÕýÈ·µÄ½»»¥¡£±àд¼¯³É²âÊÔ£¬ÓÃÓÚÐòÁл¯»ò·´ÐòÁл¯Êý¾ÝµÄËùÓдúÂë¶Î¡£ÕâÖÖÇé¿ö·¢ÉúµÄƵÂʱÈÄãÏëÏóµÄÒª¶à¡£ ÏëÒ»Ï룺

µ÷ÓÃÄãµÄ·þÎñµÄREST API

¶ÁÈ¡ºÍдÈëÊý¾Ý¿â

µ÷ÓÃÆäËûÓ¦ÓóÌÐòµÄAPI

¶ÁÈ¡ºÍдÈë¶ÓÁÐ

дÈëÎļþϵͳ

ΧÈÆÕâЩ±ß½ç±àд¼¯³É²âÊÔ¿ÉÈ·±£½«Êý¾ÝдÈëÕâЩÍⲿЭ×÷Õß²¢´ÓÖжÁÈ¡Êý¾Ý¿ÉÒÔÕý³£¹¤×÷¡£

ÔÚ±àдÏÁÕ­¼¯³É²âÊÔʱ£¬Ó¦¸Ã×ÅÑÛÓÚÔÚ±¾µØÔËÐÐÍⲿÒÀÀµ¹Øϵ£ºÆô¶¯±¾µØMySQLÊý¾Ý¿â£¬¶Ô±¾µØext4Îļþϵͳ½øÐвâÊÔ¡£Èç¹ûÄãÒªÓëµ¥¶ÀµÄ·þÎñ¼¯³É£¬ÇëÔÚ±¾µØÔËÐи÷þÎñµÄʵÀý£¬»òÕß¹¹½¨²¢ÔËÐÐÄ£·ÂÕæʵ·þÎñÐÐΪµÄ¼Ù°æ±¾¡£Èç¹ûÎÞ·¨ÔÚ±¾µØÔËÐеÚÈý·½·þÎñ£¬ÔòӦѡÔñÔËÐÐרÓòâÊÔʵÀý£¬²¢ÔÚÔËÐм¯³É²âÊÔʱָÏò´Ë²âÊÔʵÀý¡£ ±ÜÃâÔÚ×Ô¶¯»¯²âÊÔÖÐÓëʵ¼ÊÉú²úϵͳ¼¯³É¡£

½«ÊýÒÔǧ¼ÆµÄ²âÊÔÇëÇó·¢²¼µ½Éú²úϵͳÊÇÒ»ÖÖ¾ø¶ÔÈÃÈËÃÇÉúÆøµÄ·½Ê½£¬ÒòΪÄãµÄÈÕÖ¾»ìÂÒ£¨×îºÃµÄÇé¿öÏ£©£¬ÉõÖÁDoSµÄ·þÎñ£¨×µÄÇé¿ö£©¡£Í¨¹ýÍøÂ缯³É·þÎñÊǹ㷺¼¯³É²âÊԵĵäÐÍÌØÕ÷£¬²¢ÇÒʹ²âÊÔ±äµÃ¸üÂý£¬Í¨³£¸üÄÑÒÔ±àд¡£

¹ØÓÚ²âÊÔ½ð×ÖËþ£¬¼¯³É²âÊԵļ¶±ð¸ßÓÚµ¥Ôª²âÊÔ¡£

¼¯³ÉÎļþϵͳºÍÊý¾Ý¿âµÈÂýËÙ²¿¼þÍùÍù±ÈÔËÐе¥Ôª²âÊÔÒªÂýµÃ¶à£¬¶øÕâЩ²¿¼þ¶¼±»ÌÞ³ýÁË¡£±Ï¾¹£¬×÷Ϊ²âÊÔµÄÒ»²¿·Ö£¬Äã±ØÐ뿼ÂÇÍⲿÁã¼þµÄÐýת£¬ËüÃÇÒ²¿ÉÄܱÈС¶ø¹ÂÁ¢µÄµ¥Ôª²âÊÔ¸üÄѱàд¡£

²»¹ý£¬ËüÃǵÄÓÅÊÆÔÚÓÚÈÃÄúÈ·ÐÅÄúµÄÓ¦ÓóÌÐò¿ÉÒÔÕýÈ·´¦ÀíËùÐèµÄËùÓÐÍⲿ²¿¼þ¡£ µ¥Ôª²âÊÔÎÞ·¨°ïÖúÄã¡£

Êý¾Ý¿â¼¯³É

PersonRepositoryÊÇ´úÂë¿âÖÐΨһµÄ´æ´¢¿âÀà¡£ ËüÒÀÀµÓÚSpring Data£¬²¢Ã»ÓÐʵ¼ÊµÄʵÏÖ¡£

ËüÖ»ÊÇÀ©Õ¹ÁËCrudRepository½Ó¿Ú²¢ÌṩÁËÒ»¸öµ¥Ò»µÄ·½·¨Í·¡£ ÆäÓàµÄÊÇSpringħÊõ¡£

ͨ¹ýCrudRepository½Ó¿Ú£¬Spring Bootͨ¹ýfindOne£¬findAll£¬save£¬updateºÍdelete·½·¨ÌṩÁËÒ»¸ö¹¦ÄÜÍ걸µÄCRUD´æ´¢¿â¡£

ÎÒÃǵÄ×Ô¶¨Òå·½·¨¶¨Òå(findByLastName())À©Õ¹ÁËÕâ¸ö»ù±¾¹¦ÄÜ£¬²¢ÎªÎÒÃÇÌṩÁËÒ»ÖÖ°´ÐÕÊÏÌáÈ¡PersonSµÄ·½·¨¡£ Spring Data·ÖÎöÁË·½·¨µÄ·µ»ØÀàÐͼ°Æä·½·¨Ãû³Æ£¬²¢¸ù¾ÝÃüÃûÔ¼¶¨¼ì²é·½·¨Ãû³ÆÒÔÕÒ³öËüÓ¦¸Ã×öʲô¡£

ËäÈ»Spring Data¸ºÔðʵÏÖÊý¾Ý¿â´æ´¢¿â£¬µ«ÎÒÈÔÈ»±àдÁËÒ»¸öÊý¾Ý¿â¼¯³É²âÊÔ¡£ Äã¿ÉÄÜ»áÕù±ç˵£¬ÕâÊDzâÊÔ¿ò¼ÜºÍÎÒÓ¦¸Ã±ÜÃâµÄ£¬ÒòΪËü²»ÊÇÎÒÃÇÕýÔÚ²âÊԵĴúÂë¡£ ²»¹ý£¬ÎÒÏàÐÅÖÁÉÙÓÐÒ»¸ö¼¯³É²âÊÔÊÇÖÁ¹ØÖØÒªµÄ¡£Ê×ÏÈËü²âÊÔÎÒÃǵÄ×Ô¶¨ÒåfindByLastName·½·¨µÄÐÐΪÈçÔ¤ÆÚ¡£

Æä´Î£¬ËüÖ¤Ã÷ÎÒÃǵĴ洢¿âÕýȷʹÓÃÁËSpringµÄ½ÓÏß²¢¿ÉÒÔÁ¬½Óµ½Êý¾Ý¿â¡£

ΪÁËÈÃÄãÔÚ»úÆ÷ÉÏÔËÐвâÊÔ±äµÃÈÝÒ×£¨ÎÞÐè°²×°PostgreSQLÊý¾Ý¿â£©£¬ÎÒÃǵIJâÊÔÁ¬½Óµ½ÄÚ´æÖеÄH2Êý¾Ý¿â¡£

ÎÒÒѾ­ÔÚbuild.gradleÎļþÖн«H2¶¨ÒåΪ²âÊÔÒÀÀµÏî¡£testĿ¼ÖеÄapplication.propertiesûÓж¨ÒåÈκÎspring.datasourceÊôÐÔ¡£ Õâ¸æËßSpring DataʹÓÃÄÚ´æÊý¾Ý¿â¡£ÒòΪËüÔÚÀà·¾¶ÉÏ·¢ÏÖH2£¬ËùÒÔËüÔÚÔËÐÐÎÒÃǵIJâÊÔʱ½öʹÓÃH2¡£

µ±Ê¹ÓÃintÅäÖÃÎļþÔËÐÐʵ¼ÊÓ¦ÓóÌÐòʱ£¨ÀýÈ磬ͨ¹ý½«SPRING_PROFILES_ACTIVE = intÉèÖÃΪ»·¾³±äÁ¿£©£¬Ëü½«Á¬½Óµ½application-int.propertiesÖж¨ÒåµÄPostgreSQLÊý¾Ý¿â¡£

ÎÒÖªµÀ£¬ÒªÁ˽âºÍÀí½âÕâЩSpringϸ½ÚÊǷdz£¶àµÄ¡£ÎªÁ˴ﵽĿµÄ£¬Äã±ØÐëɸѡ´óÁ¿µÄÎĵµ¡£Óɴ˲úÉúµÄ´úÂëºÜÈÝÒ×Àí½â£¬µ«Èç¹ûÄã²»Á˽âSpringµÄϸ½Ú£¬¾ÍºÜÄÑÀí½â¡£

³ý´ËÖ®Í⣬ʹÓÃÄÚ´æÊý¾Ý¿âÊÇΣÏÕµÄÒµÎñ¡£

±Ï¾¹£¬ÎÒÃǵļ¯³É²âÊÔÕë¶ÔµÄÊDz»Í¬ÓÚÉú²ú»·¾³µÄ²»Í¬ÀàÐ͵ÄÊý¾Ý¿â¡£ ¼ÌÐø²¢×ÔÐоö¶¨ÊÇ·ñ¸üϲ»¶Ê¹ÓÃSpringħÊõ·½·¨ºÍ¼òµ¥µÄ´úÂ룬¶ø²»ÊǸüÃ÷È·¶ø¸üÏêϸµÄʵÏÖ¡£

ÒѾ­ÓÐ×ã¹»µÄ½âÊÍÁË£¬ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄ¼¯³É²âÊÔ£¬Ëü½«Ò»¸öPerson±£´æµ½Êý¾Ý¿âÖУ¬²¢Í¨¹ýÐÕÊÏÕÒµ½Ëü£º

Äã¿ÉÒÔ¿´µ½£¬ÎÒÃǵļ¯³É²âÊÔ×ñÑ­Óëµ¥Ôª²âÊÔÏàͬµÄarrange(ÅÅÁÐ)£¬act(ÐÐΪ)ºÍassert(¶ÏÑÔ)½á¹¹¡£¸æËßÄ㣬ÕâÊÇÒ»¸öÆÕ±éµÄ¸ÅÄ

Óë¶ÀÁ¢·þÎñ¼¯³É

ÎÒÃǵÄ΢·þÎñÓëdarksky.net£¬Ò»¸öÌìÆøREST API½»»¥¡£µ±È»£¬ÎÒÃÇÏ£ÍûÈ·±£ÎÒÃǵķþÎñÄܹ»ÕýÈ·µØ·¢ËÍÇëÇó²¢½âÎöÏìÓ¦¡£

ÎÒÃÇÏ£ÍûÔÚÔËÐÐ×Ô¶¯»¯²âÊÔʱ±ÜÃâÅöµ½ÕæÕýµÄdarksky·þÎñÆ÷¡£

ÎÒÃÇÃâ·Ñ¼Æ»®µÄÅä¶îÏÞÖÆÖ»ÊÇÔ­ÒòµÄÒ»²¿·Ö¡£ ÕæÕýµÄÔ­ÒòÊǽâñî¡£ ÎÒÃÇÔÚdarksky.netµÄ²âÊÔÓ¦¸Ã¶ÀÁ¢ÓÚÆäËûÈË¡£

¼´Ê¹ÄãµÄ»úÆ÷ÎÞ·¨·ÃÎÊdarksky·þÎñÆ÷»òdarksky·þÎñÆ÷Òòά»¤¶øÍ£»ú¡£

ÔÚÔËÐÐÎÒÃǵļ¯³É²âÊÔʱ£¬¿ÉÒÔͨ¹ýÔËÐÐÎÒÃÇ×Ô¼ºµÄÐé¼Ùdarksky·þÎñÆ÷À´±ÜÃâÅöµ½ÕæÕýµÄdarksky·þÎñÆ÷¡£ ÕâÌýÆðÀ´ÏñÊÇÒ»Ïî¼è¾ÞµÄÈÎÎñ¡£

ÓÉÓÚÏñWiremockÕâÑùµÄ¹¤¾ß£¬ÕâºÜÈÝÒס£ ¿´Õâ¸ö£º

ҪʹÓÃWiremock£¬ÎÒÃÇÔڹ̶¨¶Ë¿Ú£¨8089£©ÉÏʵÀý»¯Ò»¸öWireMockRule¡£ ʹÓÃDSL¿ÉÒÔÉèÖÃWiremock·þÎñÆ÷£¬¶¨ÒåËüÓ¦¸Ã¼àÌýµÄ¶Ëµã£¬²¢ÉèÖÃËüÓ¦¸ÃÏìÓ¦µÄ¹à×°ÏìÓ¦(canned responses)¡£

½ÓÏÂÀ´ÎÒÃǵ÷ÓÃÏëÒª²âÊԵķ½·¨£¬¼´µ÷ÓõÚÈý·½·þÎñµÄ·½·¨£¬²¢¼ì²é½á¹ûÊÇ·ñÕýÈ·½âÎö¡£

Á˽â²âÊÔÈçºÎÖªµÀÓ¦¸Ãµ÷ÓÃÐéÄâµÄWiremock·þÎñÆ÷¶ø²»ÊÇÕæÕýµÄdarksky API·Ç³£ÖØÒª¡£ ÃØÃÜÔÚÎÒÃÇ°üº¬ÔÚsrc / test / resourcesÖеÄapplication.propertiesÎļþÖС£ÕâÊÇÔËÐвâÊÔʱSpring¼ÓÔصÄÊôÐÔÎļþ¡£ÔÚÕâ¸öÎļþÖУ¬ÎÒÃǸ²¸ÇÁËÏñAPI¼üºÍURLsÕâÑùµÄÅäÖã¬ÆäÖµÊʺÏÎÒÃǵIJâÊÔÄ¿µÄ£¬ÀýÈçµ÷ÓÃÐéÄâµÄWiremock·þÎñÆ÷¶ø²»ÊÇÕæÕýµÄ·þÎñÆ÷£º

Çë×¢Ò⣬ÕâÀﶨÒåµÄ¶Ë¿Ú±ØÐëÓëÎÒÃÇÔÚ²âÊÔÖÐʵÀý»¯WireMockRuleʱËù¶¨ÒåµÄ¶Ë¿ÚÏàͬ¡£ ͨ¹ýÔÚÎÒÃǵÄWeatherClientÀàµÄ¹¹Ô캯ÊýÖÐ×¢ÈëURL£¬¿ÉÒÔ½«²âÊÔÖеÄÕæʵÌìÆøAPIµÄURLÌ滻Ϊ¼ÙÌìÆø£º

ÕâÑù£¬ÎÒÃǵÄWeatherClient´ÓÓ¦ÓóÌÐòÊôÐÔÖж¨ÒåµÄweather.urlÊôÐÔÖжÁÈ¡weatherUrl²ÎÊýµÄÖµ¡£

ʹÓÃWiremockµÈ¹¤¾ßΪµ¥¶À·þÎñ±àдnarrow integration tests·Ç³£¼òµ¥¡£ ²»ÐÒµÄÊÇ£¬ÕâÖÖ·½·¨ÓÐÒ»¸öȱµã£ºÎÒÃÇÈçºÎÈ·±£ÎÒÃÇÉèÖõļٷþÎñÆ÷µÄÐÐΪÏñÕæÕýµÄ·þÎñÆ÷£¿

ÔÚÄ¿Ç°µÄʵʩÖУ¬µ¥¶ÀµÄ·þÎñ¿ÉÄÜ»á¸Ä±äÆäAPI£¬ÎÒÃǵIJâÊÔÈÔÈ»»áͨ¹ý¡£ ÏÖÔÚÎÒÃÇÖ»ÊDzâÊÔÎÒÃǵÄWeatherClient¿ÉÒÔ½âÎö¼Ù·þÎñÆ÷·¢Ë͵ÄÏìÓ¦¡£ ÕâÊÇÒ»¸ö¿ªÊ¼£¬µ«·Ç³£´àÈõ¡£

ʹÓö˵½¶Ë²âÊÔ²¢Õë¶ÔÕæʵ·þÎñµÄ²âÊÔʵÀýÔËÐвâÊÔ¶ø²»ÊÇʹÓüٷþÎñ¿ÉÒÔ½â¾ö´ËÎÊÌ⣬µ«»áʹÎÒÃÇÒÀÀµÓÚ²âÊÔ·þÎñµÄ¿ÉÓÃÐÔ¡£

ÐÒÔ˵ÄÊÇ£¬ÓÐÒ»¸ö¸üºÃµÄ½â¾ö·½°¸À´½â¾öÕâ¸öÀ§¾³£º¶ÔÐé¼Ù·þÎñÆ÷ºÍÕæʵ·þÎñÆ÷ÔËÐкÏͬ²âÊÔ¿ÉÈ·±£ÎÒÃÇÔÚ¼¯³É²âÊÔÖÐʹÓõÄÐé¼Ù²âÊÔÊÇÖÒʵµÄ²âÊÔ¡£ ÈÃÎÒÃÇ¿´¿´½ÓÏÂÀ´µÄ¹¤×÷¡£

ºÏͬ²âÊÔ

¸ü¶àµÄÏÖ´úÈí¼þ¿ª·¢×éÖ¯ÒѾ­ÕÒµ½ÁËͨ¹ý¿ç²»Í¬ÍŶӿª·¢ÏµÍ³À´À©Õ¹Æ俪·¢¹¤×÷µÄ·½·¨¡£ ¸ö±ðÍŶӽ¨Á¢¸ö±ðµÄ£¬ËÉÉ¢ñîºÏµÄ·þÎñ£¬¶ø²»Óñ˴˲ȽÅÖº£¬²¢½«ÕâЩ·þÎñÕûºÏµ½Ò»¸ö´óµÄ£¬ÓÐÄý¾ÛÁ¦µÄϵͳÖС£

×î½üΧÈÆ΢·þÎñµÄÌÖÂÛÕýÊǹØ×¢ÕâÒ»µã¡£

½«ÏµÍ³·Ö¸î³ÉÐí¶àСÐÍ·þÎñ³£³£Òâζ×ÅÕâЩ·þÎñÐèҪͨ¹ýijЩ£¨Ï£Íû¶¨ÒåÃ÷È·µÄ£¬ÓÐʱÒâÍâÔö³¤µÄ£©½Ó¿ÚÏ໥ͨÐÅ¡£

²»Í¬Ó¦ÓóÌÐòÖ®¼äµÄ½Ó¿Ú¿ÉÒÔÓв»Í¬µÄÐÎ×´ºÍ¼¼Êõ¡£ ³£¼ûµÄÊÇ

RESTºÍJSONͨ¹ýHTTPS

ʹÓÃÀàËÆgRPCµÄRPC

ʹÓöÓÁй¹½¨Ê¼þÇý¶¯µÄÌåϵ½á¹¹

¶ÔÓÚÿ¸ö½Ó¿Ú£¬Éæ¼°Á½·½£ºÌṩÕߺÍÏû·ÑÕß¡£ ¸ÃÌṩÉÌÏòÏû·ÑÕßÌṩÊý¾Ý¡£ Ïû·ÑÕß´¦Àí´ÓÌṩÕß´¦»ñµÃµÄÊý¾Ý¡£

ÔÚRESTÊÀ½çÖУ¬ÌṩÕßʹÓÃËùÓбØÐèµÄ¶Ëµã¹¹½¨REST API;

Ïû·ÑÕßµ÷ÓôËREST APIÀ´»ñÈ¡Êý¾Ý»ò´¥·¢ÆäËû·þÎñÖеĸü¸Ä¡£

ÔÚÒì²½µÄ£¬Ê¼þÇý¶¯µÄÊÀ½çÖУ¬ÌṩÕߣ¨Í¨³£³ÆΪ·¢²¼Õߣ©½«Êý¾Ý·¢²¼µ½¶ÓÁÐÖÐ; Ïû·ÑÕߣ¨Í¨³£³ÆΪ¶©»§£©¶©ÔÄÕâЩ¶ÓÁв¢¶ÁÈ¡ºÍ´¦ÀíÊý¾Ý¡£

Figure 8: Each interface has a providing(or publishing) and a consuming(or subscribing) party. The specification of an interface can be considered a contract.

ÓÉÓÚÄã¾­³£ÔÚ²»Í¬ÍŶÓÖ®¼ä´«²¥Ïû·ÑºÍÌṩ·þÎñ£¬Äã»á·¢ÏÖ×Ô¼º´¦ÓÚ±ØÐëÃ÷È·Ö¸¶¨ÕâЩ·þÎñÖ®¼äµÄ½Ó¿Ú£¨ËùνµÄºÏͬ£©µÄÇé¿ö¡£ ´«Í³ÉÏ£¬¹«Ë¾Í¨¹ýÒÔÏ·½Ê½À´½â¾öÕâ¸öÎÊÌ⣺

±àдһ·ÝÏêϸµÄ³¤ÆÚ½çÃæ¹æ·¶£¨ºÏͬ£©

°´ÕÕ¶¨ÒåµÄºÏͬʵʩÌṩ·þÎñ

½«½çÃæ¹æ·¶ÈÓµ½Î§À¸ÉϵÄÏû·ÑÍŶÓ

µÈµ½ËûÃÇʵÏÖËûÃÇÏû·Ñ½Ó¿ÚµÄ²¿·Ö

ÔËÐÐһЩ´ó¹æÄ£µÄÊÖ¶¯ÏµÍ³²âÊÔ£¬¿´¿´ÊÇ·ñÒ»ÇÐÕý³£

Ï£ÍûÁ½¸öÍŶÓÓÀÔ¶¼á³Ö½çÃ涨Ò壬²»Òª¸ãÔÒÁË

¸üÏÖ´ú»¯µÄÈí¼þ¿ª·¢ÍŶÓÓøü×Ô¶¯»¯µÄ¶«Î÷È¡´úÁ˵Ú5²½ºÍµÚ6²½£º×Ô¶¯ÆõÔ¼²âÊÔÈ·±£Ïû·ÑÕߺÍÌṩÕß·½ÃæµÄʵÏÖÈÔÈ»¼á³ÖÒѶ¨ÒåµÄºÏͬ¡£ËûÃÇ×÷Ϊһ¸öºÜºÃµÄ»Ø¹é²âÊÔÌ×¼þ£¬²¢È·±£ÔçÆÚ·¢ÏÖÓëºÏͬµÄÆ«²î¡£

ÔÚÒ»¸ö¸üÃô½ÝµÄ×éÖ¯ÖУ¬ÄãÓ¦¸Ã²ÉÈ¡¸üÓÐЧºÍÀ˷ѸüÉٵķÏß¡£ÄãÔÚͬһ¸ö×éÖ¯ÄÚ¹¹½¨ÄúµÄÓ¦ÓóÌÐò¡£Ö±½ÓÓëÆäËû·þÎñµÄ¿ª·¢ÈËÔ±Ö±½Ó½»Ì¸£¬¶ø²»ÊÇÞðÆú¹ýÓÚÏêϸµÄÎĵµ£¬Õâ²»Ó¦¸ÃÌ«ÄÑ¡£±Ï¾¹ËûÃÇÊÇÄãµÄͬÊ£¬¶ø²»ÊǵÚÈý·½¹©Ó¦ÉÌ£¬ÄãÖ»ÄÜͨ¹ý¿Í»§Ö§³Ö»ò·¨ÂÉÉϵķÀµ¯ºÏͬ½øÐн»Ì¸¡£

Ïû·ÑÕßÇý¶¯ºÏͬ²âÊÔ£¨CDC²âÊÔ£©ÈÃÏû·ÑÕßÍƶ¯ºÏͬµÄʵʩ¡£Ê¹ÓÃCDC£¬½Ó¿ÚµÄʹÓÃÕß±àд²âÊÔ£¬´Ó½Ó¿Ú¼ì²é½Ó¿ÚËùÐèµÄËùÓÐÊý¾Ý¡£È»ºóÏû·ÑÍŶӷ¢²¼ÕâЩ²âÊÔ£¬ÒԱ㷢²¼ÍŶӿÉÒÔÇáËÉ»ñÈ¡²¢Ö´ÐÐÕâЩ²âÊÔ¡£Ö§Ô®ÍŶÓÏÖÔÚ¿ÉÒÔͨ¹ýÔËÐÐCDC²âÊÔÀ´¿ª·¢ËûÃǵÄAPI¡£Ò»µ©ËùÓвâÊÔͨ¹ý£¬ËûÃÇÖªµÀÒѾ­ÊµÊ©ÁËÏû·ÑÍŶÓËùÐèµÄÒ»ÇС£

Figure 9: ºÏͬ²âÊÔÈ·±£½Ó¿ÚµÄÌṩÕߺÍËùÓÐÏû·ÑÕ߶¼¼á³ÖÒѶ¨ÒåµÄ½Ó¿ÚÆõÔ¼¡£ ͨ¹ýCDC²âÊÔ£¬½Ó¿ÚµÄÏû·ÑÕßÒÔ×Ô¶¯»¯²âÊÔµÄÐÎʽ·¢²¼ËûÃǵÄÐèÇó;ÌṩÕß²»¶ÏµØ»ñÈ¡²¢Ö´ÐÐÕâЩ²âÊÔ

ÕâÖÖ·½·¨ÔÊÐíÌṩÍŶÓֻʵʩÕæÕý±ØÒªµÄÊÂÇ飨±£³Ö¼òµ¥£¬YAGNI(You ain¡¯t gonna need it)µÈµÈ£©¡£

Ìṩ½çÃæµÄÍŶÓÓ¦³ÖÐø£¨ÔÚËûÃǵĹ¹½¨Á÷Ë®ÏßÖУ©»ñÈ¡²¢ÔËÐÐÕâЩCDC²âÊÔ£¬ÒÔÁ¢¼´·¢ÏÖÈκÎÖØ´ó¸ü¸Ä¡£

Èç¹ûËûÃǸü¸Ä½çÃ棬ËûÃǵÄCDC²âÊÔ½«»áʧ°Ü£¬´Ó¶ø×èֹͻ·¢±ä»¯µÄ·¢Éú¡£ Ö»Òª²âÊÔ±£³ÖÂÌÉ«£¬ÍŶӿÉÒÔ½øÐÐËûÃÇϲ»¶µÄÈκθü¸Ä£¬¶ø²»±Øµ£ÐÄÆäËûÍŶӡ£ Ïû·ÑÕßÇý¶¯µÄºÏͬ·½·¨»á¸øÄã´øÀ´Ò»¸ö¿´ÆðÀ´ÏñÕâÑùµÄ¹ý³Ì£º

Ïû·ÑÍŶӱàд·ûºÏËùÓÐÏû·ÑÕßÆÚÍûµÄ×Ô¶¯»¯²âÊÔ

ËûÃÇΪÌṩÍŶӷ¢²¼²âÊÔ

ÌṩÍŶӳÖÐøÔËÐÐCDC²âÊÔ²¢±£³ÖÂÌÉ«

Ò»µ©CDC²âÊÔÖжϣ¬Á½¸öÍŶӶ¼»á»¥ÏཻÁ÷

Èç¹ûÄãµÄ×éÖ¯²ÉÓÃ΢·þÎñ·½·¨£¬½øÐÐCDC²âÊÔÊǽ¨Á¢×ÔÖÎÍŶӵÄÖØÒªÒ»²½¡£ CDC²âÊÔÊÇ´Ù½øÍŶӹµÍ¨µÄ×Ô¶¯»¯·½Ê½¡£

ËûÃÇÈ·±£ÍŶÓÖ®¼äµÄ½çÃæËæʱ¶¼ÔÚ¹¤×÷¡£

CDC²âÊÔʧ°ÜÊÇÒ»¸öºÜºÃµÄÖ¸±ê£¬ÄãÓ¦¸Ã×ßµ½ÊÜÓ°ÏìµÄÍŶӣ¬ÁÄÁÄÈκμ´½«µ½À´µÄAPI±ä»¯£¬²¢Á˽âÄãÏëÈçºÎÇ°½ø¡£

Ò»¸öԭʼµÄCDC²âÊÔʵÏÖ¿ÉÒÔÏñ¶ÔAPI·¢ÆðÇëÇóÒ»Ñù¼òµ¥£¬²¢ÉùÃ÷ÏìÓ¦°üº¬ÄãÐèÒªµÄËùÓж«Î÷¡£È»ºó½«ÕâЩ²âÊÔ´ò°üΪ¿ÉÖ´ÐÐÎļþ£¨.gem£¬.jar£¬.sh£©£¬²¢½«ÆäÉÏ´«µ½ÆäËûÍŶӿÉÒÔ»ñÈ¡µÄµØ·½£¨ÀýÈçArtifactoryµÈ¹¤¼þ´æ´¢¿â£©¡£

ÔÚ¹ýÈ¥µÄ¼¸ÄêÖУ¬CDC·½·¨±äµÃÔ½À´Ô½Á÷ÐУ¬²¢ÇÒÒѾ­¹¹½¨Á˼¸ÖÖ¹¤¾ßÀ´Ê¹ËüÃǸüÈÝÒ×±àдºÍ½»»»¡£

Pact¿ÉÄÜÊÇ×î½ü×îÍ»³öµÄÒ»¸ö¡£

Ëü¾ßÓÐΪÏû·ÑÕߺÍÌṩÉ̱àд²âÊԵĸ´ÔÓ·½·¨£¬¿ÉΪÄãÌṩ¿ªÏä¼´ÓõĶÀÁ¢·þÎñ´æ¸ù£¬²¢ÔÊÐíÄúÓëÆäËûÍŶӽ»»»CDC²âÊÔ¡£

PactÒѾ­±»ÒÆÖ²µ½ºÜ¶àƽ̨ÉÏ£¬²¢ÇÒ¿ÉÒÔÓëJVMÓïÑÔ£¬Ruby£¬.NET£¬JavaScriptµÈÒ»ÆðʹÓá£

Èç¹ûÄúÏ뿪ʼʹÓÃCDC²¢ÇÒ²»ÖªµÀÈçºÎ£¬Pact¿ÉÒÔÊÇÒ»¸öÀíÖǵÄÑ¡Ôñ¡£

ÕâЩÎĵµ¿ÉÄÜ»áÔÚµÚһʱ¼äѹµ¹Ò»ÇС£

±£³ÖÄÍÐÄ£¬²¢Å¬Á¦Í¨¹ýËü¡£ËüÓÐÖúÓÚÉîÈëÁ˽⼲²¡Ô¤·À¿ØÖÆÖÐÐÄ£¬´Ó¶øʹÄúÔÚÓëÆäËûÍŶӺÏ×÷ʱ¸üÈÝÒ׳«µ¼Ê¹Óü²²¡Ô¤·À¿ØÖÆÖÐÐÄ¡£

Ïû·ÑÕßÇý¶¯µÄºÏͬ²âÊÔ(CDC)¿ÉÒÔ³ÉΪһ¸öÕæÕýµÄÓÎÏ·¹æÔò¸Ä±äÕߣ¬ÒÔ½¨Á¢×ÔÐŵÄÍŶӣ¬¿ÉÒÔ¿ìËÙ¶ø×ÔÐŵØÐж¯¡£

°ïÄã×Ô¼ºÒ»¸ö棬ÔĶÁÕâ¸ö¸ÅÄî²¢ÊÔÒ»ÊÔ¡£

Ò»Ì׿ɿ¿µÄCDC²âÊÔ¶ÔÓÚÄܹ»¿ìËÙÒƶ¯¶ø²»»áÆÆ»µÆäËû·þÎñ²¢¶ÔÆäËûÍŶÓÔì³ÉºÜ´óµÄ´ìÕÛ,Õâ¸ö²âÊÔÊÇÎ޼۵ġ£

Ïû·ÑÕß²âÊÔ£¨ÎÒÃǵÄÍŶӣ©

ÎÒÃǵÄ΢·þÎñʹÓÃÌìÆøAPI¡£

Òò´Ë£¬ÎÒÃÇÓÐÔðÈαàдһ·ÝÏû·ÑÕß²âÊÔ£¬ÒÔÈ·¶¨ÎÒÃǶÔ΢·þÎñÓëÌìÆø·þÎñÖ®¼äµÄºÏͬ£¨API£©µÄÆÚÍû¡£

Ê×ÏÈ£¬ÎÒÃÇÔÚbuild.gradleÖаüº¬Ò»¸öÓÃÓÚ±àдÆõÔ¼Ïû·ÑÕß²âÊԵĿ⣺

testCompile('au.com.dius:pact-jvm-consumer-junit_2.11:3.5.5')

¸ÐлÕâ¸ö¿â£¬ÎÒÃÇ¿ÉÒÔʵÏÖÒ»¸öÏû·ÑÕß²âÊÔ²¢Ê¹ÓÃpactµÄÄ£Äâ·þÎñ£º

Èç¹û×Ðϸ¹Û²ì£¬Äã»á¿´µ½WeatherClientConsumerTestÓëWeatherClientIntegrationTest·Ç³£ÏàËÆ¡£Õâ´ÎÎÒÃDz»Ê¹ÓÃWiremock×÷Ϊ·þÎñÆ÷stub£¬¶øÊÇʹÓÃPact¡£ÊÂʵÉÏ£¬Ïû·ÑÕß²âÊÔÓ뼯³É²âÊÔÍêÈ«Ò»Ñù£¬ÎÒÃÇÓÃÒ»¸östubÌæ»»ÕæÕýµÄµÚÈý·½·þÎñÆ÷£¬¶¨ÒåÆÚÍûµÄÏìÓ¦²¢¼ì²éÎÒÃǵĿͻ§¶ËÊÇ·ñ¿ÉÒÔÕýÈ·½âÎöÏìÓ¦¡£ÔÚÕâ¸öÒâÒåÉÏ£¬WeatherClientConsumerTest±¾Éí¾ÍÊÇÒ»¸öС·¶Î§µÄ¼¯³É²âÊÔ¡£Óë»ùÓÚÏßÁ¬½ÓµÄ²âÊÔÏà±È£¬ÕâÖÖ²âÊÔµÄÓŵãÊÇÿ´ÎÔËÐÐʱ¶¼»áÉú³ÉÒ»¸öpactÎļþ£¨ÔÚtarget / pacts /£¦pact-name>.jsonÖÐÕÒµ½£©¡£¸ÃЭÒéÎļþÒÔÌØÊâµÄJSON¸ñʽÃèÊöÁËÎÒÃǶԺÏͬµÄÆÚÍû¡£È»ºó¿ÉÒÔʹÓôËЭÒéÎļþÀ´ÑéÖ¤ÎÒÃǵĴæ¸ù·þÎñÆ÷µÄÐÐΪÓëÕæʵ·þÎñÆ÷µÄÐÐΪÏàͬ¡£ÎÒÃÇ¿ÉÒÔ½«Ð­ÒéÎļþ½»¸øÌṩ½çÃæµÄÍŶӡ£ËûÃÇÄÃÕâ¸öЭÒéÎļþ£¬²¢Ê¹ÓÃÔÚÄÇÀﶨÒåµÄÆÚÍûдһ¸öÌṩÕß²âÊÔ¡£ÕâÑùËûÃDzâÊÔËûÃǵÄAPIÊÇ·ñÂú×ãÎÒÃÇËùÓеÄÆÚÍû¡£

Äã»á·¢ÏÖÕâÊÇCDCÏû·ÑÕßÇý¶¯²¿·ÖµÄÀ´Ô´¡£

Ïû·ÑÕßͨ¹ýÃèÊöËûÃǵÄÆÚÍûÀ´Íƶ¯½Ó¿ÚµÄʵÏÖ¡£ÌṩÕß±ØÐëÈ·±£ËûÃÇÄܹ»Âú×ãËùÓеÄÆÚÍû£¬²¢ÇÒËûÃÇÍê³ÉÁË¡£ ûÓжƽð£¬Ã»ÓÐYAGNIºÍ¶«Î÷¡£

½«Ð­ÒéÎļþÌṩ¸øÌṩÍŶӿÉÒÔͨ¹ý¶àÖÖ·½Ê½½øÐС£Ò»¸ö¼òµ¥µÄ·½·¨Êǽ«ËüÃÇ·ÅÈë°æ±¾¿ØÖƲ¢¸æËßÌṩÕßÍŶÓ×ÜÊÇ»ñÈ¡×îа汾µÄЭÒéÎļþ¡£¸ü¶àµÄ½ø²½ÊÇʹÓù¤¼þ´æ´¢¿â£¬ÏñÑÇÂíÑ·S3»òЭÒé´úÀíµÄ·þÎñ¡£

¿ªÊ¼¼òµ¥²¢¸ù¾ÝÐèÒªÔö³¤¡£

ÔÚÄãµÄÕæʵÊÀ½çµÄÓ¦ÓóÌÐòÖУ¬Äã²»ÐèÒªÁ½Õߣ¬Ò»¸ö¼¯³É²âÊÔºÍÒ»¸ö¿Í»§¶ËÀàµÄÏû·ÑÕß²âÊÔ¡£Ê¾Àý´úÂë¿â°üº¬Á½¸öÏòÄãչʾÈçºÎʹÓÃÈκÎÒ»¸ö¡£Èç¹ûÄãÏëʹÓÃpact±àдCDC²âÊÔ£¬ÎÒ½¨Òé¼á³ÖʹÓúóÕß¡£±àд²âÊÔµÄЧ¹ûÊÇÒ»ÑùµÄ¡£Ê¹ÓÃpactµÄºÃ´¦ÊÇ£¬Äú¿ÉÒÔ×Ô¶¯»ñµÃÒ»·ÝpactÎļþ£¬ÆäÖаüº¬¶ÔÆäËûÍŶӿÉÒÔÇáËÉʵʩÆ乩ӦÉ̲âÊԵĺÏͬÆÚÍû¡£µ±È»£¬Èç¹ûÄãÄÜ˵·þÆäËûÍŶÓҲʹÓÃpact£¬ÕâÊÇΨһÓÐÒâÒåµÄ¡£Èç¹ûÕâ²»Æð×÷Óã¬Ê¹Óü¯³É²âÊÔºÍWiremock×éºÏÊÇÒ»¸öÌåÃæµÄ¼Æ»®b¡£

ÌṩÕß²âÊÔ£¨ÁíÒ»¸öÍŶӣ©

ÌṩÕß²âÊÔ±ØÐëÓÉÌṩÌìÆøAPIµÄÈËÔ±Ö´ÐС£ÎÒÃÇÕýÔÚʹÓÃdark sky.netÌṩµÄ¹«¹²API¡£ÀíÂÛÉÏ£¬darksky team ½«ÔÚËûÃǵÄ×îºóʵʩÌṩÉ̲âÊÔ£¬ÒÔ¼ì²éËûÃÇÊÇ·ñÎ¥·´ÁËËûÃǵÄÓ¦ÓóÌÐòºÍÎÒÃǵķþÎñÖ®¼äµÄºÏͬ¡£

ÏÔÈ»£¬ËûÃDz»¹ØÐÄÎÒÃÇ΢²»×ãµÀµÄʾÀýÓ¦ÓóÌÐò£¬Ò²²»»áΪÎÒÃÇʵʩCDC²âÊÔ¡£ÕâÊÇÃæÏò¹«ÖÚµÄAPIºÍ²ÉÓÃ΢·þÎñµÄ×éÖ¯Ö®¼äµÄ¾Þ´ó²îÒì¡£ÃæÏò¹«ÖÚµÄAPI²»¿ÉÄÜ¿¼ÂÇÿ¸öÓû§£¬·ñÔòËûÃǽ«ÎÞ·¨Ç°½ø¡£ÔÚÄã×Ô¼ºµÄ×éÖ¯ÖУ¬¿ÉÒÔ¶øÇÒÓ¦¸Ã¡£ÄãµÄÓ¦ÓúܿÉÄÜ»áΪÉÙÊý¼¸¸öÓû§Ìṩ·þÎñ£¬×î¶à¿ÉÄÜÓм¸Ê®¸öÓû§¡£ÎªÁ˱£³ÖÎȶ¨µÄϵͳ£¬»áºÜºÃµØ±àдÕâЩ½Ó¿ÚµÄÌṩÕß²âÊÔ¡£

ÌṩÍŶӻñÈ¡pactÎļþ²¢Õë¶ÔÆäÌṩµÄ·þÎñÔËÐиÃÎļþ¡£Îª´Ë£¬ËûÃÇʵÏÖÁËÒ»¸öÌṩ³ÌÐò²âÊÔ£¬¶ÁÈ¡¸ÃÎļþ£¬´æ´¢Ò»Ð©²âÊÔÊý¾Ý£¬²¢¸ù¾ÝËûÃǵķþÎñÔËÐÐÔÚpactÎļþÖж¨ÒåÆÚÍûÖµ¡£

Pact»ï°éÒѾ­±àдÁ˼¸¸ö¿âÀ´Ö´ÐÐÌṩÕß²âÊÔ¡£ËûÃǵÄÖ÷ÒªGitHub repoΪÄãÌṩÁËÒ»¸öºÜºÃµÄ¸ÅÀÀ£¬ÄĸöÏû·ÑÕߺÍÄÄЩÌṩ³ÌÐò¿â¿ÉÓᣠѡÔñ×îÊʺÏÄãµÄ¼¼Êõ¶ÑÕ»µÄÄǸö¡£

ΪÁ˼òµ¥Æð¼û£¬ÎÒÃǼÙÉèdarksky APIÒ²ÊÇÔÚSpring BootÖÐʵÏֵġ£ ÔÚÕâÖÖÇé¿öÏ£¬ËûÃÇ¿ÉÒÔʹÓÃSpringµÄpact ÌṩÕߣ¬ËüºÜºÃµØ¹³ÈëSpringµÄMockMVC»úÖÆ¡£ darksky.netÍŶӽ«Ö´ÐеļÙÉèÌṩÕß²âÊÔ¿ÉÄÜÈçÏÂËùʾ£º

Äã»á¿´µ½ËùÓÐÌṩ³ÌÐò²âÊÔ±ØÐëÖ´ÐеIJÙ×÷ÊǼÓÔØÒ»¸öpactÎļþ£¨ÀýÈ磬ͨ¹ýʹÓÃ@PactFolder×¢ÊÍÀ´¼ÓÔØÒÔÇ°ÏÂÔصÄЭÒéÎļþ£©£¬È»ºó¶¨ÒåÓ¦ÈçºÎÌṩԤ¶¨Òå״̬µÄ²âÊÔÊý¾Ý£¨ÀýÈ磬ʹÓÃMockito mocks£©¡£Ã»Óж¨ÖƲâÊÔ¿ÉÒÔ±»ÊµÊ©¡£ÕâЩ¶¼À´×ÔpactÎļþ¡£Provider test ÓëÏû·ÑÕß²âÊÔÖÐÉùÃ÷µÄprovider nameºÍ״̬ƥÅäµÄ¶ÔÓ¦¶ÔÏóÊǷdz£ÖØÒªµÄ¡£

Provider Test(our team)

ÎÒÃÇÒѾ­¿´µ½ÈçºÎ²âÊÔÎÒÃǵķþÎñºÍÌìÆøÌṩÉÌÖ®¼äµÄºÏͬ¡£ÓÐÁËÕâ¸ö½Ó¿ÚÎÒÃǵķþÎñ×÷ΪÏû·ÑÕߣ¬ÌìÆø·þÎñ¾ÍÏñÌṩÕßÒ»Ñù¡£½øÒ»²½Ë¼¿¼»á¿´µ½£¬ÎÒÃǵķþÎñ»¹³äµ±ÆäËûÈ˵ÄÌṩÕߣºÌṩÁËÒ»¸öREST API£¬Ëü×¼±¸ºÃ¹©ÆäËûÈËʹÓõĶ˵㡣

ÕýÈç¸Õ¸ÕÁ˽âµÄÄÇÑù£¬ºÏͬ²âÊԷdz£¼¤ÁÒ£¬ÎÒÃǵ±È»Ò²»áΪÕâ·ÝºÏͬдһ·ÝºÏͬ²âÊÔ¡£ ÐÒÔ˵ÄÊÇ£¬ÕýÔÚʹÓÃÏû·ÑÕßÇý¶¯ÆõÔ¼(consumer-driven contracts)£¬Òò´ËËùÓÐÏû·ÑÍŶӶ¼ÏòÎÒÃÇ·¢ËÍËûÃǵÄPacts£¬ÎÒÃÇ¿ÉÒÔʹÓÃËüÃÇÀ´ÎªÎÒÃǵÄREST APIʵÏÖÌṩÕß²âÊÔ¡£

Ê×ÏÈ£¬½«SpringµÄPactÌṩ³ÌÐò¿âÌí¼Óµ½ÏîÄ¿ÖУº

testCompile('au.com.dius:pact-jvm-provider-spring_2.12:3.5.5')

ʵÏÖÌṩÕß²âÊԵķ½Ê½Óë֮ǰÃèÊöµÄÏàͬ¡£ÎªÁ˼òµ¥Æð¼û£¬ÎÒ½«ÎÒÃǵļòµ¥Ïû·ÑÕßµÄpactÎļþÊäÈëµ½ÎÒÃÇ·þÎñµÄ´æ´¢¿âÖС£ÕâʹµÃÄ¿µÄ¸üÈÝÒ×£¬ÔÚÕæʵ³¡¾°ÖУ¬Äã¿ÉÄÜ»áʹÓøü¸´ÔӵĻúÖÆÀ´·Ö·¢ÄãµÄpactÎļþ¡£

ËùʾµÄExampleProviderTestÐèÒª¸ù¾ÝÎÒÃÇÌṩµÄpactÎļþÌṩ״̬£¬¾ÍÊÇÕâÑù¡£Ò»µ©ÔËÐÐÌṩ³ÌÐò²âÊÔ£¬Pact¾Í»áÄÃÆðpactÎļþ²¢Õë¶ÔÎÒÃǵķþÎñ·¢ÆðHTTPÇëÇó£¬È»ºó¸ù¾ÝÉèÖõÄ״̬×ö³öÏìÓ¦¡£

UI Tests

´ó¶àÊýÓ¦ÓóÌÐò¶¼ÓÐijÖÖÓû§½çÃæ¡£

ͨ³££¬ÎÒÃÇÕýÔÚÌÖÂÛWebÓ¦ÓóÌÐò»·¾³ÖеÄWeb½çÃæ¡£ÈËÃǾ­³£Íü¼ÇREST API»òÃüÁîÐнçÃæÓ뻨ÉÚµÄWebÓû§½çÃæÒ»Ñù¶àµÄÓû§½çÃæ¡£

UI tests²âÊÔÓ¦ÓóÌÐòµÄÓû§½çÃæÊÇ·ñÕý³£¹¤×÷¡£Óû§ÊäÈëÓ¦¸Ã´¥·¢ÕýÈ·µÄ²Ù×÷£¬Êý¾ÝÓ¦¸Ã³ÊÏÖ¸øÓû§£¬UI״̬Ӧ¸Ã°´Ô¤Æڸı䡣

UI²âÊԺͶ˵½¶Ë²âÊÔÓÐʱ£¨ÈçMike CohnµÄ°¸Àý£©±»ÈÏΪÊÇÒ»»ØÊ¡£

¶ÔÎÒÀ´Ëµ£¬ÕâÊÇÁ½¸öÏ໥Õý½»µÄ¸ÅÄî¡£

Êǵģ¬¶Ëµ½¶Ë²âÊÔÄãµÄÓ¦ÓóÌÐòͨ³£Òâζ×Åͨ¹ýÓû§½çÃæÀ´Çý¶¯ÄúµÄ²âÊÔ¡£

È»¶ø£¬·´¹ýÀ´È´ÊDz»ÕýÈ·µÄ¡£

²âÊÔÄãµÄÓû§½çÃæ²»Ò»¶¨ÒªÒԶ˵½¶ËµÄ·½Ê½½øÐС£

¸ù¾ÝÄãʹÓõļ¼Êõ£¬²âÊÔÓû§½çÃæ¿ÉÄܷdz£¼òµ¥£¬Ö»ÐèΪºó¶ËJavaScript´úÂë±àдһЩµ¥Ôª²âÊÔ²¢½«Æäºó¶Ë´úÂëɾ³ý¼´¿É¡£

ʹÓô«Í³µÄWebÓ¦ÓóÌÐò²âÊÔÓû§½çÃæ¿ÉÒÔʹÓÃÏñSeleniumÕâÑùµÄ¹¤¾ßÀ´ÊµÏÖ¡£Èç¹ûÄãÈÏΪREST APIÊÇÄãµÄÓû§½çÃ棬Ӧ¸Ãͨ¹ýΧÈÆAPI±àдÊʵ±µÄ¼¯³É²âÊÔÀ´»ñµÃËùÐèµÄÒ»ÇС£

ÓÐÁËWeb½çÃ棬¿ÉÄÜÐèÒªÔÚUIÖвâÊÔ¶à¸ö·½Ã棺ÐÐΪ£¬²¼¾Ö£¬¿ÉÓÃÐÔ£¬ºÜÉÙ¶Ô¹«Ë¾Éè¼ÆµÄ²âÊÔ¡£

ÐÒÔ˵ÄÊÇ£¬²âÊÔÓû§½çÃæµÄÐÐΪ·Ç³£¼òµ¥¡£Äãµã»÷ÕâÀÔÚÄÇÀïÊäÈëÊý¾Ý£¬²¢Ï£ÍûÓû§½çÃæµÄ״̬ÏàÓ¦µØ¸Ä±ä¡£ÏÖ´úµÄµ¥Ò³ÃæÓ¦ÓóÌÐò¿ò¼Ü£¨react£¬vue.js£¬AngularµÈ£©Í¨³£´øÓÐ×Ô¼ºµÄ¹¤¾ßºÍhelpers£¬ËüÃÇÔÊÐíÄúÒÔÏ൱µÍ¼¶µÄ£¨µ¥Ôª²âÊÔ£©·½Ê½³¹µ×²âÊÔÕâЩ½»»¥¡£¼´Ê¹ÄãʹÓÃvanilla javascriptÀ´ÊµÏÖ×Ô¼ºµÄÇ°¶ËʵÏÖ£¬ÄãÒ²¿ÉÒÔʹÓó£¹æµÄ²âÊÔ¹¤¾ß£¬ÈçJasmine»òMocha¡£Ê¹Óøü´«Í³µÄ·þÎñÆ÷¶ËäÖȾӦÓóÌÐò£¬»ùÓÚSeleniumµÄ²âÊÔ½«ÊÇÄãµÄ×î¼ÑÑ¡Ôñ¡£

²âÊÔÄãµÄwebÓ¦ÓóÌÐòµÄ²¼¾ÖÊÇ·ñ±£³ÖÍêºÃ£¬ÓеãÀ§ÄÑ¡£¸ù¾ÝÄãµÄÓ¦ÓóÌÐòºÍÄãµÄÓû§ÐèÇ󣬿ÉÄÜÐèҪȷ±£´úÂë¸ü¸Ä²»»áÒâÍâµØÆÆ»µÍøÕ¾µÄ²¼¾Ö¡£

ÎÊÌâÔÚÓÚ£¬¼ÆËã»úÔÚ¼ì²éijЩ¡°¿´ÆðÀ´²»´í¡±£¨¿ÉÄÜÊÇһЩ´ÏÃ÷µÄ»úÆ÷ѧϰËã·¨¿ÉÄÜÔÚ½«À´¸Ä±ä£©·½ÃæÊǷdz£Ôã¸âµÄ¡£

Èç¹ûÄãÏëÒªÔÚ¹¹½¨¹ÜµÀÖÐ×Ô¶¯¼ì²éWebÓ¦ÓóÌÐòµÄÉè¼Æ£¬ÓÐһЩ¹¤¾ß¿É¹©³¢ÊÔ¡£ÕâЩ¹¤¾ßÖеĴó¶àÊý¶¼ÀûÓÃSeleniumÒÔ²»Í¬µÄä¯ÀÀÆ÷ºÍ¸ñʽ´ò¿ªÄúµÄWebÓ¦ÓóÌÐò£¬½ØÈ¡ÆÁÄ»½Øͼ²¢½«ËüÃÇÓëÒÔÇ°ÅÄÉãµÄ½Øͼ½øÐбȽϡ£Èç¹ûоɽØͼÒÔÒâÏë²»µ½µÄ·½Ê½³öÏÖ²îÒ죬¸Ã¹¤¾ß»á֪ͨÄú¡£

GalenÊÇÕâЩ¹¤¾ßÖ®Ò»¡£

µ«ÊÇ£¬Èç¹ûÄúÓÐÌØÊâÒªÇ󣬼´Ê¹ÍƳö×Ô¼ºµÄ½â¾ö·½°¸Ò²²»ÄÑ¡£ºÍÎÒÓкÏ×÷µÄһЩÍŶÓÒѾ­½¨Á¢ÁËÕóÈݺͻùÓÚJavaµÄ±í¸çjimupupÀ´ÊµÏÖÀàËƵŦÄÜ¡£Á½ÖÖ¹¤¾ß¶¼²ÉÓÃÁËÎÒ֮ǰÃèÊöµÄ»ùÓÚSeleniumµÄ·½·¨¡£

Ò»µ©ÄãÏë²âÊÔ¿ÉÓÃÐԺ͡°¿´ÆðÀ´²»´í¡±µÄÒòËØ£¬Äã¾ÍÀ뿪ÁË×Ô¶¯»¯²âÊÔÁìÓò¡£ÕâÊÇÄãÓ¦¸ÃÒÀÀµÌ½Ë÷ÐÔ²âÊÔ£¬¿ÉÓÃÐÔ²âÊÔ£¨ÕâÉõÖÁ¿ÉÒÔÏñ×ßÀȲâÊÔÒ»Ñù¼òµ¥£©µÄÁìÓò£¬²¢ÏòÓû§Õ¹Ê¾ËûÃÇÊÇ·ñϲ»¶Ê¹ÓÃÄãµÄ²úÆ·£¬²¢ÇÒ¿ÉÒÔʹÓÃËùÓй¦Äܶø²»»á¸Ðµ½¾ÚÉ¥»ò·³ÄÕ¡£

¶Ëµ½¶Ë²âÊÔ

ͨ¹ýÓû§½çÃæ²âÊÔÒѲ¿ÊðµÄÓ¦ÓóÌÐòÊÇÄã¿ÉÒÔ²âÊÔÓ¦ÓóÌÐòµÄ×îΪ¶Ëµ½¶ËµÄ·½Ê½¡£ Ç°ÃæÃèÊöµÄwebdriverÇý¶¯µÄUI²âÊÔÊǶ˵½¶Ë²âÊÔµÄÒ»¸öºÜºÃµÄÀý×Ó¡£

µ±ÄãÐèҪȷ¶¨Èí¼þÊÇ·ñÕý³£¹¤×÷ʱ£¬¶Ëµ½¶Ë²âÊÔ£¨Ò²³ÆΪ¹ã·º¶ÑÕ»²âÊÔ£©ÎªÄãÌṩ×î´óµÄÐÅÐÄ¡£Í¨¹ýSeleniumºÍWebDriverЭÒ飬Äã¿ÉÒÔͨ¹ý×Ô¶¯Çý¶¯£¨ÎÞÍ·£©ä¯ÀÀÆ÷Õë¶Ô²¿ÊðµÄ·þÎñ£¬Ö´Ðеã»÷²Ù×÷£¬ÊäÈëÊý¾Ý²¢¼ì²éÓû§½çÃæµÄ״̬À´×Ô¶¯Ö´ÐвâÊÔ¡£Äú¿ÉÒÔÖ±½ÓʹÓÃSelenium»òʹÓûùÓÚËüµÄ¹¤¾ß£¬Nightwatch¾ÍÊÇÆäÖÐÖ®Ò»¡£

¶Ëµ½¶Ë²âÊÔ´øÀ´Á˸÷×ÔµÄÎÊÌâ¡£

ËüÃÇÊdzöÁËÃûµÄËéƬ£¬ÍùÍùÒòÒâÍâºÍ²»¿ÉÔ¤¼ûµÄÔ­Òò¶øʧ°Ü¡£ËûÃǵÄʧ°ÜÍùÍùÊÇÒ»ÖÖÎó½â¡£ÄãµÄÓû§½çÃæÔ½¸´ÔÓ£¬²âÊÔÔ½ËéƬ¡£ä¯ÀÀÆ÷µÄ¹Öñ±£¬¼ÆʱÎÊÌ⣬¶¯»­ºÍÒâÍâµÄµ¯³ö¶Ô»°¿òÖ»ÊÇÈÃÎÒ»¨¸ü¶àʱ¼ä½øÐе÷ÊÔµÄһЩԭÒò£¬¶ø²»ÊÇÎÒÏë³ÐÈϵġ£

ÔÚ΢·þÎñÊÀ½çÖУ¬Ë­¸ºÔð±àдÕâЩ²âÊÔÒ²ÊÇÒ»¸ö´óÎÊÌâ¡£ÓÉÓÚËüÃÇ¿çÔ½¶à¸ö·þÎñ£¨Õû¸öϵͳ£©£¬Òò´ËûÓÐÒ»¸öÍŶӸºÔð±àд¶Ëµ½¶Ë²âÊÔ¡£

Èç¹ûÄãÓÐÒ»¸ö¼¯ÖеÄÖÊÁ¿±£Ö¤ÍŶӣ¬ËûÃÇ¿´ÆðÀ´ºÜºÏÊÊ¡£

È»¶ø£¬ÓµÓÐÒ»¸ö¼¯ÖеÄÖÊÁ¿±£Ö¤ÍŶÓÊÇÒ»¸öºÜ´óµÄ·´Ä£Ê½£¬ÔÚDevOpsÊÀ½çÀï²»Ó¦¸ÃÓÐһϯ֮µØ£¬ÄãµÄÍŶÓÊÇÕæÕýÒâÒåÉϵĿçÖ°ÄÜÍŶӡ£Ë­Ó¦¸ÃÓµÓж˵½¶ËµÄ²âÊÔ²¢²»ÈÝÒס£Ò²ÐíÄãµÄ×éÖ¯ÓÐÒ»¸öʵ¼ùÉçÇø»òÒ»¸ö¿ÉÒÔÕÕ¹ËÕâЩµÄ¸ßÖÊÁ¿¹«»á¡£ÕÒµ½ÕýÈ·µÄ´ð°¸Ôںܴó³Ì¶ÈÉÏÈ¡¾öÓÚÄãµÄ×éÖ¯¡£

´ËÍ⣬¶Ëµ½¶Ë²âÊÔÐèÒª´óÁ¿Î¬»¤£¬ÔËÐÐËٶȷdz£»ºÂý¡£

¿¼Âǵ½²»Ö¹Ò»Á½¸ö΢·þÎñµÄ¸ñ¾Ö£¬ÄãÉõÖÁÎÞ·¨ÔÚ±¾µØÔËÐж˵½¶Ë²âÊÔ-ÒòΪÕâÐèÒªÔÚ±¾µØÆô¶¯ËùÓÐ΢·þÎñ¡£ÔÚÄãµÄ¿ª·¢»úÆ÷ÉÏÆô¶¯ÁËÊý°Ù¸öÓ¦ÓóÌÐò£¬¶ø²»»áÕ¨»ÙÄãµÄRAM¡£

ÓÉÓÚά»¤³É±¾¸ß°º£¬Ó¦¸Ã¾¡Á¿¼õÉٶ˵½¶Ë²âÊÔµÄÊýÁ¿¡£

¿¼ÂÇÓû§ÔÚÓ¦ÓóÌÐòÖÐʹÓõĸ߼ÛÖµ½»»¥¡£

³¢ÊÔÌá³ö¶¨Òå²úÆ·ºËÐļÛÖµµÄÓû§Âọ́¬²¢½«ÕâЩÓû§ÂóÌÖÐ×îÖØÒªµÄ²½Öèת»¯Îª×Ô¶¯»¯µÄ¶Ëµ½¶Ë²âÊÔ¡£

Èç¹ûÄãÕýÔÚ½¨Á¢Ò»¸öµç×ÓÉÌÎñÍøÕ¾£¬Äã×îÓмÛÖµµÄ¿Í»§Âó̿ÉÄÜÊÇÒ»¸öÓû§ËÑË÷²úÆ·£¬½«Æä·ÅÈ빺ÎïÀº²¢½áÕÊ¡£½ö´Ë¶øÒÑ¡£

Ö»ÒªÕâ¸öÂóÌÈÔÈ»ÓÐЧ£¬²»Ó¦¸ÃÌ«Âé·³¡£

Ò²ÐíÄã»á·¢ÏÖÒ»Á½¸ö¸üÖØÒªµÄÓû§Âọ́¬¿ÉÒÔ½«Æäת»¯Îª¶Ëµ½¶Ë²âÊÔ¡£

³ý´ËÖ®Í⣬¸ü¶àµÄÊÂÇ鶼¿ÉÄܸüÍ´¿à¡£

Çë¼Çס£ºÄãµÄ²âÊÔ½ð×ÖËþÖÐÓкܶà½ÏµÍµÄ¼¶±ð£¬ÒѾ­²âÊÔÁ˸÷Öֱ߽簸Àý²¢ÓëϵͳµÄÆäËû²¿·Ö½øÐÐÁ˼¯³É¡£ ûÓбØÒªÔÚ¸ü¸ß²ã´ÎÉÏÖظ´ÕâЩ²âÊÔ¡£ ¸ß°ºµÄά»¤¹¤×÷Á¿ºÍ´óÁ¿µÄÎ󱨻á¼õÂýÄãµÄËٶȣ¬»áÈÃÄãÔÚ²âÊÔÖÐʧȥÐÅÐÄ£¬ÒËÔç²»Ò˳١£

User Interface End-to-End Test

¶ÔÓڶ˵½¶Ë²âÊÔ£¬SeleniumºÍWebDriverЭÒéÊÇÐí¶à¿ª·¢ÈËÔ±Ê×Ñ¡µÄ¹¤¾ß¡£ ʹÓÃSelenium£¬Äú¿ÉÒÔÑ¡ÔñÒ»¸öÄãϲ»¶µÄä¯ÀÀÆ÷£¬È»ºóÈÃËü×Ô¶¯µ÷ÓÃÄãµÄÍøÕ¾£¬µã»÷½çÃæÕâÀïºÍÄÇÀÊäÈëÊý¾Ý²¢¼ì²éÓû§½çÃæÖеı仯¡£

SeleniumÐèÒªÒ»¸ö¿ÉÒÔÆô¶¯²¢ÓÃÓÚÔËÐвâÊÔµÄä¯ÀÀÆ÷¡£¶ÔÓÚ²»Í¬µÄä¯ÀÀÆ÷£¬¿ÉÒÔʹÓöà¸öËùνµÄ¡°Çý¶¯³ÌÐò¡±¡£

Ñ¡ÔñÒ»¸ö£¨»ò¶à¸ö£©²¢½«ÆäÌí¼Óµ½ÄúµÄbuild.gradle¡£

ÎÞÂÛÄãÑ¡ÔñÄÄÖÖä¯ÀÀÆ÷£¬¶¼ÐèҪȷ±£ÍŶÓÖеÄËùÓпª·¢ÈËÔ±ºÍÄãµÄCI·þÎñÆ÷ÔÚ±¾µØ°²×°ÁËÕýÈ·°æ±¾µÄä¯ÀÀÆ÷¡£±£³Öͬ²½¿ÉÄÜ»á·Ç³£Í´¿à¡£¶ÔÓÚJava£¬ÓÐÒ»¸öºÜºÃµÄСÐÍ¿â½Ð×öwebdrivermanager£¬Ëü¿ÉÒÔ×Ô¶¯ÏÂÔز¢ÉèÖÃÄãÏëҪʹÓõÄÕýÈ·°æ±¾µÄä¯ÀÀÆ÷¡£½«ÕâÁ½¸öÒÀÀµ¹ØϵÌí¼Óµ½ÄãµÄbuild.gradleÖУ¬È»ºó¿ÉÒÔ¼ÌÐø£º

ÔÚ²âÊÔÌ×¼þÖÐÔËÐÐÍêÕûµÄä¯ÀÀÆ÷¿ÉÄÜ»áºÜÂé·³¡£

ÌرðÊÇÔÚʹÓóÖÐø½»¸¶Ê±£¬ÔËÐйܵÀµÄ·þÎñÆ÷¿ÉÄÜÎÞ·¨Æô¶¯°üº¬Óû§½çÃæµÄä¯ÀÀÆ÷£¨ÀýÈçÒòΪûÓÐX-Server¿ÉÓã©¡£

Äú¿ÉÒÔͨ¹ýÆô¶¯ÏñxvfbÕâÑùµÄÐéÄâX-ServerÀ´½â¾ö´ËÎÊÌâ¡£

×î½üµÄ·½·¨ÊÇʹÓÃÎÞÍ·ä¯ÀÀÆ÷£¨¼´Ã»ÓÐÓû§½çÃæµÄä¯ÀÀÆ÷£©À´ÔËÐÐwebdriver²âÊÔ¡£ Ö±µ½×î½üPhantomJSÊÇÁìÏȵÄ×Ô¶¯»¯µÄÎÞÍ·ä¯ÀÀÆ÷¡£

×Ô´ÓChromiumºÍFirefoxÐû²¼ËûÃÇÔÚä¯ÀÀÆ÷ÖÐʵÏÖÎÞͷģʽºó£¬PhantomJSͻȻ±äµÃ¹ýʱÁË¡£

±Ï¾¹£¬×îºÃʹÓÃÓû§Êµ¼ÊʹÓõÄä¯ÀÀÆ÷£¨±ÈÈçFirefoxºÍChrome£©À´²âÊÔÍøÕ¾£¬¶ø²»Êǽö½ö×÷Ϊ¿ª·¢ÈËÔ±·½±ãÄãʹÓ÷ÂÕæä¯ÀÀÆ÷¡£

ÎÞÍ·µÄFirefoxºÍChrome¶¼ÊÇȫеģ¬²¢ÇÒÉÐδ±»¹ã·º²ÉÓÃÀ´Ö´ÐÐwebdriver²âÊÔ¡£ ÎÒÃÇÏë±£³Ö¼òµ¥¡£

¶ø²»ÊÇ°ÚŪÎÞ±ßÎ޼ʵÄģʽ£¬ÈÃÎÒÃǼá³ÖʹÓÃSeleniumºÍÆÕͨä¯ÀÀÆ÷µÄ¾­µä·½Ê½°É¡£ Ò»¸ö¼òµ¥µÄ¶Ëµ½¶Ë²âÊÔ£¬Ê¹ÓÃChromeä¯ÀÀÆ÷£¬µ¼º½µ½ÎÒÃǵķþÎñ£¬²¢¼ì²éÍøÕ¾µÄÄÚÈÝÈçÏÂËùʾ£º

Çë×¢Ò⣬Èç¹ûÄãÔÚÔËÐд˲âÊÔµÄϵͳ£¨±¾µØ¼ÆËã»ú£¬ÄãµÄCI·þÎñÆ÷£©ÉÏ°²×°ÁËChrome£¬¸Ã²âÊÔ½«½öÔÚÄãµÄϵͳÉÏÔËÐС£²âÊԺܼòµ¥¡£ËüʹÓÃ@SpringBootTestÔÚÒ»¸öËæ»ú¶Ë¿ÚÉÏÔËÐÐÕû¸öSpringÓ¦ÓóÌÐò¡£È»ºó£¬ÎÒÃÇʵÀý»¯Ò»¸öеÄChromeä¯ÀÀÆ÷Çý¶¯³ÌÐò£¬¸æËßËüµ¼º½µ½ÎÒÃǵÄ΢·þÎñµÄ/ hello¶Ëµã£¬²¢¼ì²éËüÊÇ·ñÔÚä¯ÀÀÆ÷´°¿ÚÖдòÓ¡³ö¡°Hello World£¡¡±¡£ÕâÊǺܿáµÄ¶«Î÷£¡

REST API End-to-End Test

ÔÚ²âÊÔÓ¦ÓóÌÐòʱ±ÜÃâʹÓÃͼÐÎÓû§½çÃæÊÇÒ»¸öºÃÖ÷Ò⣬Ëü¿ÉÒÔÌṩ±È½ÏÍêÕûµÄ¶Ëµ½¶Ë²âÊÔ£¬Í¬Ê±ÈÔº­¸ÇÓ¦ÓóÌÐò¶ÑÕ»µÄ´ó²¿·ÖÄÚÈÝ¡£µ±Í¨¹ýÓ¦ÓóÌÐòµÄWeb½çÃæ½øÐвâÊÔÌرðÀ§ÄÑʱ£¬Õâ¿ÉÒÔÅÉÉÏÓó¡¡£ Ò²ÐíÄãÉõÖÁûÓÐÒ»¸öWeb UI£¬¶øÊÇÌṩһ¸öREST APIÀ´´úÌ棨ÒòΪÄãÓÐÒ»¸öµ¥¶ÀµÄÒ³ÃæÓ¦ÓóÌÐòÔÚij¸öµØ·½Óë¸ÃAPI½»Ì¸£¬»òÕß½ö½öÊÇÒòΪÄã±ÉÊÓÒ»Çж¼ºÜºÃ£©¡£ ÎÞÂÛÄÄÖÖ·½Ê½£¬Ò»¸öSubcutaneous Test£¬Ö»ÊÇÔÚͼÐÎÓû§½çÃæϽøÐвâÊÔ£¬²¢ÇÒ¿ÉÒÔÈÃÄãÕæÕý×ßÔ¶£¬¶ø²»»á¶ÔÐÅÐÄÔì³ÉÌ«´óËðʧ¡£ Èç¹ûÄãÏñÎÒÃǵÄʾÀý´úÂëÄÇÑùÌṩREST API£¬ÄǾÍÊÇÕýÈ·µÄ×ö·¨£º

µ±ÎÒ²âÊÔÒ»¸öÌṩREST APIµÄ·þÎñʱ£¬ÈÃÎÒÔÙÏòÄúչʾһ¸ö¸ü·½±ãµÄ¿â¡£

REST-assured

ÊÇÒ»¸öΪÄãÌṩһ¸öºÜºÃµÄDSLµÄ¿â£¬ÓÃÓÚ·¢ËÍÕë¶ÔAPIµÄʵ¼ÊHTTPÇëÇó²¢ÆÀ¹ÀÄãÊÕµ½µÄÏìÓ¦¡£

Ê×ÏÈÒª×öµÄÊÂÇéÊÇ£º½«ÒÀÀµ¹ØϵÌí¼Óµ½build.gradleÖС£

testCompile('io.rest-assured:rest-assured:3.0.3')

½èÖúÕâ¸ö¿â£¬ÎÒÃÇ¿ÉÒÔΪÎÒÃǵÄREST APIʵʩ¶Ëµ½¶Ë²âÊÔ£º

 

ÔٴΣ¬ÎÒÃÇʹÓÃ@SpringBootTestÆô¶¯Õû¸öSpringÓ¦ÓóÌÐò¡£

ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃÇ@Autowire PersonRepository£¬ÒÔ±ãÎÒÃÇ¿ÉÒÔÇáËɵؽ«²âÊÔÊý¾ÝдÈëÎÒÃǵÄÊý¾Ý¿â¡£ µ±ÎÒÃÇÏÖÔÚÒªÇóREST APIÏòÎÒÃǵÄÅóÓÑ¡°ÅËÏÈÉú¡±Ëµ¡°´òÕкô¡±Ê±£¬ÎÒÃÇ»áµÃµ½Ò»¸öºÜºÃµÄÎʺò¡£ ·Ç³£ºÃ£¡ Èç¹ûÄãÉõÖÁûÓÐÔËÐÐÍøÂç½çÃ棬ÄÇô¾Í¿ÉÒÔ½øÐÐ×ã¹»¶àµÄ¶Ëµ½¶Ë²âÊÔ¡£

Acceptance Tests ¡ª Do Your Features Work Correctly?

ÔÚ²âÊÔ½ð×ÖËþÖÐÒƶ¯µÃÔ½¸ß£¬½øÈë²âÊÔÁìÓòµÄ¿ÉÄÜÐÔ¾ÍÔ½´ó£¬´ÓÓû§µÄ½Ç¶ÈÀ´¿´£¬Äã¹¹½¨µÄ¹¦ÄÜÊÇ·ñÕý³£¹¤×÷¡£

¿ÉÒÔ½«ÄãµÄÓ¦ÓóÌÐòÊÓΪºÚºÐ×Ó£¬²¢½«²âÊÔÖеĽ¹µã´ÓÏÂÃæÖÐÒƳý

µ±ÎÒÊäÈëÖµxºÍyʱ£¬·µ»ØÖµÓ¦¸ÃÊÇz

¶øÊÇÓÃ

ÓÐʱÄã»áÌýµ½ÕâЩ²âÊԵŦÄܲâÊÔ»òÑéÊÕ²âÊÔµÄÌõ¿î¡£

ÓÐʱÈËÃÇ»á¸æËßÄ㹦ÄܺÍÑéÊÕ²âÊÔÊDz»Í¬µÄ¶«Î÷¡£ÕâЩÊõÓïÊÇ»ìÏýµÄ¡£ÉõÖÁÓÐʱºòÈËÃÇ»áÎÞÐÝÖ¹µØÌÖÂÛ´ë´ÇºÍ¶¨Ò塣ͨ³£ÕâÖÖÌÖÂÛ»áÒýÆðÏ൱´óµÄ»ìÂÒ¡£Õâ²ÅÖØÒª£ºÔÚijһʱ¿Ì£¬ÄãÓ¦¸ÃÈ·±£´ÓÓû§µÄ½Ç¶È²âÊÔÈí¼þÊÇ·ñÕý³£¹¤×÷£¬¶ø²»½ö½öÊÇ´Ó¼¼Êõ½Ç¶È¡£ ÄãÈÏΪÕâЩ²âÊÔÕæµÄ²»ÊÇÄÇôÖØÒª¡£

È»¶ø£¬½øÐÐÕâЩ²âÊÔÊÇÓбØÒªµÄ¡£

Ñ¡ÔñÒ»¸ö£¬¼á³ÖÏÂÈ¥£¬È»ºó±àдÕâЩ²âÊÔ¡£

ÕâÒ²ÊÇÈËÃÇ̸ÂÛBDDºÍʹÄúÄܹ»ÒÔBDD·½Ê½ÊµÊ©²âÊԵŤ¾ßµÄʱ¿Ì¡£

BDD»òBDD·ç¸ñµÄ±àд²âÊÔ·½Ê½¿ÉÄÜÊÇÒ»¸ö²»´íµÄÇÏÃÅ£¬¿É½«ÄãµÄ˼Ïë´Óʵʩϸ½ÚתÒƵ½Óû§ÐèÇó¡£ ¼ÌÐø³¢ÊÔ°É¡£

ÄãÉõÖÁ²»ÐèÒªÏñCucumberÄÇÑù²ÉÓÃÈ«ÃæµÄBDD¹¤¾ß£¨¾¡¹ÜÄã¿ÉÒÔ£©¡£

ÓÐЩ¶ÏÑԿ⣨±ÈÈçchai.jsÔÊÐíÄãÓÃshouldÑùʽµÄ¹Ø¼ü×ÖÀ´±àд¶ÏÑÔ£¬ÕâÑù¿ÉÒÔÈÃÄãµÄ²âÊÔÄܹ»¶ÁÈ¡¸ü¶àÀàËÆÓÚBDDµÄÄÚÈÝ¡£¼´Ê¹Ä㲻ʹÓÃÌṩÕâÖÖ±íʾ·¨µÄ¿â£¬´ÏÃ÷ÇÒ·Ö¹¤ºÏÀíµÄ´úÂë ½«ÔÊÐíÄã±àдÒÔÓû§ÐÐΪΪÖÐÐĵIJâÊÔ¡£Ò»Ð©¸¨Öú·½·¨/º¯Êý¿ÉÒÔΪÄã´øÀ´ºÜ³¤µÄ·Ҫ×ߣº

ÑéÊÕ²âÊÔ¿ÉÒÔÓв»Í¬µÄÁ£¶È¼¶±ð¡£

´ó¶àÊýʱºòËûÃǽ«»áÏ൱¸ß¼¶²¢Í¨¹ýÓû§½çÃæ²âÊÔÄúµÄ·þÎñ¡£È»¶ø£¬Àí½âÔÚ¼¼ÊõÉϲ»ÐèÒªÔÚ²âÊÔ½ð×ÖËþµÄ×î¸ß¼¶±ð±àдÑéÊÕ²âÊÔÊǺܺõġ£

Èç¹ûÄãµÄÓ¦ÓóÌÐòÉè¼ÆºÍÊÖÍ·µÄ³¡¾°ÔÊÐíÄúÔڽϵ͵ļ¶±ðÉϱàдÑéÊÕ²âÊÔ£¬ÄǾÍÈ¥×ö°É¡£ ½øÐеͼ¶²âÊԱȽøÐи߼¶²âÊÔÒªºÃ¡£ ÑéÊÕ²âÊԵĸÅÄî - Ö¤Ã÷¹¦ÄÜΪÓû§ÕýÈ·µØ¹¤×÷ - ÍêÈ«Óë²âÊÔ½ð×ÖËþÕý½»¡£

Exploratory Testing

¼´Ê¹ÊÇ×îÓù¦µÄ×Ô¶¯»¯²âÊÔÒ²²»ÍêÃÀ¡£ ÓÐʱºòÄã»á´í¹ý×Ô¶¯»¯²âÊÔÖеÄijЩ±ßÔµÇé¿ö¡£ ÓÐʱͨ¹ý±àдµ¥Ôª²âÊÔÀ´¼ì²âÌض¨µÄ´íÎ󼸺õÊDz»¿ÉÄܵġ£ ijЩÖÊÁ¿ÎÊÌâÔÚÄúµÄ×Ô¶¯»¯²âÊÔÖÐÉõÖÁ²»Ã÷ÏÔ£¨¿¼ÂÇÉè¼Æ»ò¿ÉÓÃÐÔ£©¡£ ¾¡¹ÜÄã¶Ô²âÊÔ×Ô¶¯»¯ÓÐ×Å×îºÃµÄÒâͼ£¬µ«Ä³Ð©ÀàÐ͵ÄÊÖ¶¯²âÊÔÈÔÈ»ÊÇÒ»¸öºÃÖ÷Òâ¡£

Figure 12: Use exploratory testing to spot all quality issues that your build pipeline didn¡¯t spot

ÔÚ²âÊÔ×éºÏÖаüº¬Ì½Ë÷ÐÔ²âÊÔ¡£ ÕâÊÇÒ»ÖÖÊÖ¶¯²âÊÔ·½·¨£¬Ç¿µ÷²âÊÔÈËÔ±µÄ×ÔÓɺʹ´ÔìÁ¦£¬ÒÔ±ãÔÚÔËÐÐÖеÄϵͳÖз¢ÏÖÖÊÁ¿ÎÊÌâ¡£

Ö»Ð趨ÆÚ°²ÅÅһЩʱ¼ä£¬¾íÆðÐä×Ó²¢³¢ÊÔÆÆ»µÓ¦ÓóÌÐò¡£

ʹÓÃÆÆ»µÐÔµÄ˼ά·½Ê½£¬Ïë³ö°ì·¨ÔÚÓ¦ÓóÌÐòÖÐÒý·¢ÎÊÌâºÍ´íÎó¡£ ¼Ç¼ÄúÒÔºóÕÒµ½µÄËùÓÐÄÚÈÝ¡£

×¢Òâ´íÎó£¬Éè¼ÆÎÊÌ⣬ÏìӦʱ¼ä»ºÂý£¬¶ªÊ§»òÎóµ¼ÐԵĴíÎóÐÅÏ¢ÒÔ¼°ÆäËûÒ»ÇлáÈÃÄã×÷ΪÈí¼þÓû§·³ÄÕµÄÊÂÇé¡£

ºÃÏûÏ¢ÊÇ£¬Äã¿ÉÒÔʹÓÃ×Ô¶¯»¯²âÊÔÄã´ó²¿·Ö·¢ÏÖ¡£ÎªÄã·¢ÏֵĴíÎó±àд×Ô¶¯»¯²âÊÔ£¬È·±£½«À´²»»á³öÏָôíÎóµÄÈκλØÍË¡£´ËÍ⣬Ëü»¹¿ÉÒÔ°ïÖúÔÚ´íÎóÐÞ¸´ÆÚ¼äËõСÎÊÌâµÄ¸ùÔ´¡£

ÔÚ̽Ë÷ÐÔ²âÊÔ¹ý³ÌÖУ¬Äã»á·¢ÏÖͨ¹ýÄãµÄ¹¹½¨¹ÜµÀδ±»×¢Òâµ½µÄÎÊÌâ¡£²»Òª¸Ðµ½¾ÚÉ¥¡£ Õâ¶ÔÄúµÄ¹¹½¨¹ÜµÀµÄ³ÉÊì¶ÈÓкܺõķ´À¡¡£

ÓëÈκη´À¡Ò»Ñù£¬ÇëÎñ±Ø²ÉÈ¡Ðж¯£º¿¼ÂÇÄ㽫À´¿ÉÒÔ²Éȡʲô´ëÊ©À´±ÜÃâÕâЩÎÊÌâ¡£Ò²ÐíÄã´í¹ýÁËһЩ×Ô¶¯»¯²âÊÔ¡£

Ò²ÐíÔÚÕâ´Îµü´úÖжÔ×Ô¶¯»¯²âÊÔàÍÖ®ÒԱǣ¬²¢ÇÒÐèÒªÔÚ½«À´½øÐиü³¹µ×µÄ²âÊÔ¡£ Ò²ÐíÓÐÒ»ÖÖÉÁÁÁµÄй¤¾ß»ò·½·¨¿ÉÒÔÓÃÀ´±ÜÃ⽫À´³öÏÖÕâЩÎÊÌâ¡£

ÇëÎñ±Ø²ÉÈ¡Ðж¯£¬ÒÔ±ã¹ÜµÀºÍÕû¸öÈí¼þ½»¸¶½«×ߵøüÔ¶±äµÃ¸ü¼Ó³ÉÊì¡£

¹ØÓÚTesting TerminologyµÄ½áÂÛ

̸ÂÛ²»Í¬µÄ²âÊÔ·ÖÀà×ÜÊǺÜÀ§ÄÑ¡£

µ±ÎÒ̸ÂÛµ¥Ôª²âÊÔʱ£¬ÎÒµÄÒâ˼¿ÉÄÜÓëÄãµÄÀí½âÉÔÓв»Í¬¡£

Èç¹ûÊǼ¯³É²âÊÔ£¬Çé¿ö¸üÔã¡£

¶ÔÓÚijЩÈËÀ´Ëµ£¬¼¯³É²âÊÔÊÇÒ»Ïî·Ç³£¹ã·ºµÄ»î¶¯£¬¿ÉÒÔ²âÊÔÕû¸öϵͳµÄÐí¶à²»Í¬²¿·Ö¡£ ¶ÔÎÒ¶øÑÔ£¬ÕâÊÇÒ»¸öÏ൱ÏÁ°¯µÄ¶«Î÷£¬Ò»´ÎÖ»²âÊÔÒ»¸öÍⲿ²¿¼þµÄ¼¯³É¡£ һЩÈ˳ÆËûÃÇΪ¼¯³É²âÊÔ£¬Ò»Ð©È˳ÆËûÃÇΪ×é¼þ²âÊÔ£¬Ò»Ð©È˸üϲ»¶ÊõÓï·þÎñ²âÊÔ¡£

ÉõÖÁÆäËûÈËÒ²»áÕù±ç˵£¬ËùÓÐÕâÈý¸öÊõÓﶼÊÇÍêÈ«²»Í¬µÄ¶«Î÷¡£ ûÓÐ¶Ô´í¡£

Èí¼þ¿ª·¢ÉçÇø¸ù±¾Ã»ÓÐÉ跨ΧÈƲâÊÔ¶¨ÒåÃ÷È·µÄÊõÓï¡£

²»ÒªÌ«¾ÐÄàÓÚÄ£ÀâÁ½¿ÉµÄ»°¡£

Èç¹ûÄú³Æ֮Ϊ¶Ëµ½¶Ë»ò¹ã·ºµÄ¶ÑÕ»²âÊÔ»ò¹¦ÄܲâÊÔ£¬ÔòÎ޹ؽôÒª¡£

Èç¹ûÄãµÄ¼¯³É²âÊÔ¶ÔÄãÀ´ËµÒâζ×ÅÓëÆäËû¹«Ë¾µÄÈ˲»Í¬£¬ÄǾÍû¹ØϵÁË¡£ Êǵģ¬Èç¹ûÎÒÃǵÄרҵÄܹ»°´ÕÕһЩÃ÷È·¶¨ÒåµÄÌõ¼þ½â¾ö²¢ÇÒÈ«²¿¼á³ÖÏÂÈ¥£¬Äǽ«»á·Ç³£ºÃ¡£ ²»ÐÒµÄÊÇ£¬Õ⻹ûÓз¢Éú¡£

¶øÇÒ£¬ÓÉÓÚÔÚ±àд²âÊÔʱÓкܶàϸ΢²î±ð£¬·´¶ø±ÈÒ»¶ÑÀëÉ¢µÄ´æ´¢Í°¸üÏñÒ»¸öƵÆ×£¬ÕâʹµÃÒ»ÖµÄÃüÃû¸ü¼ÓÀ§ÄÑ¡£

ÖØÒªµÄÊÇ£¬ÄãÓ¦¸ÃÕÒµ½ÊʺÏÄãºÍÄãµÄÍŶӵÄÌõ¿î¡£Çå³þÄãÏëдµÄ²»Í¬ÀàÐ͵IJâÊÔ¡£ ¾ÍÍŶÓÖеÄÃüÃû´ï³ÉÒ»Ö£¬²¢¾ÍÿÖÖÀàÐ͵IJâÊÔ·¶Î§´ï³É¹²Ê¶¡£ Èç¹ûÄãÔÚÍŶÓÄÚ²¿£¨»òÕßÉõÖÁÔÚÄãµÄ×éÖ¯ÄÚ£©»ñµÃÕâÖÖÒ»ÖÂÐÔ£¬ÄÇôÄãÓ¦¸Ã¹ØÐĵľÍÊÇÕâЩ¡£ µ±Simon StewartÃèÊöËûÃÇÔÚGoogleʹÓõķ½·¨Ê±£¬Simon Stewart×ܽáµÃ·Ç³£ºÃ¡£

¶øÇÒÎÒÈÏΪÕâÍêÈ«±íÃ÷£¬ÈÃÃû×ÖºÍÃüÃû¹ßÀý¹ýÓÚ³ÁÃÆÊDz»ÖµµÃµÄÂé·³¡£

Putting Tests Into Your Depolyment Pipeline

Èç¹ûÄãʹÓõÄÊdzÖÐø¼¯³É»ò³ÖÐø½»¸¶£¬ÄÇô½«ÓµÓÐÒ»¸ö²¿Êð¹ÜµÀ£¬Ã¿´Î¶ÔÈí¼þ½øÐиü¸Äʱ¶¼»áÔËÐÐ×Ô¶¯»¯²âÊÔ¡£

ͨ³£Õâ¸ö¹ÜµÀ·Ö³É¼¸¸ö½×¶Î£¬Öð½¥ÈÃÄã¸ü¼ÓÈ·ÐÅÈí¼þÒÑ×¼±¸ºÃ²¿Êðµ½Éú²ú»·¾³¡£ Ìýµ½ËùÓÐÕâЩ²»Í¬ÀàÐ͵IJâÊÔ£¬Äã¿ÉÄÜÏëÖªµÀÈçºÎ½«ËüÃÇ·ÅÖÃÔÚ²¿Êð¹ÜµÀÖС£ Òª»Ø´ðÕâ¸öÎÊÌ⣬Ӧ¸Ã¿¼ÂdzÖÐø½»¸¶£¨Êµ¼ÊÉÏÊǼ«ÏÞ±à³ÌºÍÃô½ÝÈí¼þ¿ª·¢µÄºËÐļÛÖµÖ®Ò»£©µÄ»ù±¾¼ÛÖµÖ®Ò»£º¿ìËÙ·´À¡¡£

Ò»¸öºÃµÄ¹¹½¨¹ÜµÀ¸æËßÄ㣬¾¡¿ÉÄÜ¿ìµØ¸ãÔÒ¡£Äã²»ÏëµÈÒ»¸öСʱ²ÅÄÜ·¢ÏÖÄãµÄ×îдúÂë¸ü¸ÄÆÆ»µÁËһЩ¼òµ¥µÄµ¥Ôª²âÊÔ¡£Èç¹ûÄãµÄ¹ÜµÀÐèÒªºÜ³¤Ê±¼ä²ÅÄܸø·´À¡£¬ÄÇôÄãºÜ¿ÉÄÜÒѾ­»Ø¼ÒÁË¡£Í¨¹ý¿ìËÙÔËÐеIJâÊÔ·ÅÔÚÁ÷Ë®ÏßµÄÔçÆڽ׶Σ¬¿ÉÒÔÔÚ¼¸ÃëÖÓÄÚ»ñµÃÕâЩÐÅÏ¢£¬Ò²¿ÉÄÜÐèÒª¼¸·ÖÖÓ¡£Ïà·´£¬ÔÚ½ÏÍíµÄ½×¶Î£¬½Ï³¤Ê±¼äµÄÔËÐвâÊÔ£¨Í¨³£ÊÇ½Ï¿í·¶Î§µÄ²âÊÔ£©·ÅÔÚ²»»áÍƳٿìËÙÔËÐвâÊԵķ´À¡¡£Äã»á·¢ÏÖ¶¨Ò岿Êð¹ÜµÀµÄ½×¶Î²»ÊÇÓɲâÊÔÀàÐÍÇý¶¯µÄ£¬¶øÊÇÓÉËٶȺͷ¶Î§¾ö¶¨µÄ¡£¿¼Âǵ½ÕâÒ»µãËü¿ÉÒÔÊÇÒ»¸ö·Ç³£ºÏÀíµÄ¾ö¶¨£¬°ÑһЩÕæÕýµÄÏÁÒ巶ΧµÄºÍ¿ìËÙÔËÐеļ¯³É²âÊÔÔÚͬһ¸öÎę̀ÉÏÄãµÄµ¥Ôª²âÊÔ - ½ö½öÊÇÒòΪËûÃǸøÄã¸ü¿ìµÄ·´À¡£¬¶ø²»ÊÇÒòΪÄãÏë»­ÑØ×ÅÄãµÄ²âÊÔµÄÕýʽÀàÐÍ¡£

Avoid Test Duplication

ÏÖÔÚÄãÖªµÀÄãÓ¦¸Ãд³ö²»Í¬ÀàÐ͵IJâÊÔ£¬µ«»¹ÓÐÒ»¸ö¿ÉÒÔ±ÜÃâµÄ´íÎó£ºÔÚ½ð×ÖËþµÄ²»Í¬²ã´ÎÉÏÖظ´²âÊÔ¡£

ËäÈ»ÄãµÄÖ±¾õ¿ÉÄÜ»á˵²»ÐèҪ̫¶àµÄ²âÊÔ¡£ÎÒÏòÄã±£Ö¤£¬ÐèÒª¡£

²âÊÔÌ×¼þÖеÄÿһÏî²âÊÔ¶¼ÐèÒª¶îÍâµÄʱ¼ä£¬²¢²»ÊÇÃâ·ÑµÄ¡£

±àдºÍά»¤²âÊÔÐèҪʱ¼ä¡£ ÔĶÁºÍÀí½âÆäËûÈ˵IJâÊÔÐèҪʱ¼ä¡£

µ±È»£¬ÔËÐвâÊÔÐèҪʱ¼ä¡£

ÓëÉú²ú´úÂëÒ»Ñù£¬Ó¦¸Ã¾¡Á¿¼ò»¯²¢±ÜÃâÖظ´¡£

ÔÚʵʩÄãµÄ²âÊÔ½ð×ÖËþµÄ±³¾°Ï£¬ÄãÓ¦¸Ã¼ÇסÁ½Ìõ¾­Ñé·¨Ôò£º

1¡¢Èç¹û½Ï¸ß¼¶±ðµÄ²âÊÔ·¢ÏÖ´íÎ󣬲¢ÇÒûÓнϵͼ¶±ðµÄ²âÊÔʧ°Ü£¬ÔòÐèÒª±àд½ÏµÍ¼¶±ðµÄ²âÊÔ

2¡¢¾¡¿ÉÄܽ«²âÊÔÍƵ½²âÊÔ½ð×ÖËþµÄ¾¡Í·¡£

µÚÒ»Ìõ¹æÔòºÜÖØÒª£¬ÒòΪ½ÏµÍ¼¶±ðµÄ²âÊÔ¿ÉÒÔÈÃÄã¸üºÃµØËõС´íÎó²¢ÒÔ¶ÀÁ¢·½Ê½¸´ÖÆ´íÎó¡£ µ±µ÷ÊÔÊÖÍ·µÄÎÊÌâʱ£¬ËüÃÇ»áÔËÐеøü¿ì£¬²¢ÇÒ²»»áÓ·Öס£ ËüÃǽ«³ÉΪδÀ´Á¼ºÃµÄ»Ø¹é²âÊÔ¡£

µÚ¶þÌõ¹æÔò¶ÔÓÚ¿ìËÙ±£³Ö²âÊÔÌ×¼þ·Ç³£ÖØÒª¡£

Èç¹ûÄãÒѾ­Ôڽϵͼ¶±ðµÄ²âÊÔÖÐ×ÔÐŵزâÊÔÁËËùÓÐÌõ¼þ£¬Ôò²»ÐèÒªÔÚ²âÊÔÌ×¼þÖб£Áô¸ü¸ß¼¶±ðµÄ²âÊÔ¡£ ËüÖ»ÊÇûÓÐÔö¼Ó¸ü¶àµÄÐÅÐÄ¡£

¶àÓàµÄ²âÊÔ»áÔÚÈÕ³£¹¤×÷ÖбäµÃ·³ÈË¡£

ÄãµÄ²âÊÔÌ×¼þ»á±äÂý£¬µ±Äã¸Ä±ä´úÂëµÄÐÐΪʱÄãÐèÒª¸Ä±ä¸ü¶àµÄ²âÊÔ¡£

ÈÃÎÒÃÇÒÔ²»Í¬µÄ·½Ê½À´±íÊö£ºÈç¹û¸ü¸ß¼¶±ðµÄ²âÊÔÈÃÄã¸ü¼ÓÈ·ÐÅÓ¦ÓóÌÐòÕý³£¹¤×÷£¬ÄÇôÄãÓ¦¸ÃÓµÓÐËü¡£

ΪControllerÀà±àдµ¥Ôª²âÊÔÓÐÖúÓÚ²âÊÔController±¾ÉíµÄÂß¼­¡£

²»¹ý£¬Õâ²¢²»ÄܸæËßÕâ¸öControllerÌṩµÄREST¶ËµãÊÇ·ñʵ¼ÊÏìÓ¦HTTPÇëÇó¡£ ËùÒÔ£¬Òƶ¯²âÊÔ½ð×ÖËþ²¢Ìí¼ÓÒ»¸ö²âÊÔÀ´¼ì²éÈ·ÇÐµÄ - µ«Ã»Óиü¶à¡£

Äã²»Òª²âÊԵͼ¶²âÊÔÒѾ­Ôڸ߼¶²âÊÔÖи²¸ÇµÄËùÓÐÌõ¼þÂß¼­ºÍ±ß½çÇé¿ö¡£

È·±£½Ï¸ß¼¶±ðµÄ²âÊÔ²àÖØÓڽϵͼ¶±ð²âÊÔÎÞ·¨¸²¸ÇµÄ²¿·Ö¡£

µ±Éæ¼°µ½²»ÌṩÈκμÛÖµµÄ²âÊÔʱ£¬Îҷdz£Ñϸñ¡£

ÎÒɾ³ýÁ˽ϵͼ¶±ðµÄ¸ß¼¶²âÊÔ£¨ÒòΪËüÃDz»Ìṩ¶îÍâµÄÖµ£©¡£

Èç¹û¿ÉÄܵĻ°£¬ÎÒÓýϵͼ¶±ðµÄ²âÊÔÌæ»»¸ü¸ß¼¶±ðµÄ²âÊÔ¡£

ÓÐʱºòÕâºÜÄÑ£¬ÌرðÊÇÈç¹ûÄãÖªµÀÌá³öÒ»¸ö²âÊÔÊǼè¿àµÄ¹¤×÷¡£

½÷·À³Áû³É±¾ÃýÎó²¢Çû÷ɾ³ý¼ü¡£

ûÓÐÀíÓÉÀ˷Ѹü¶à±¦¹óµÄʱ¼äÔÚ²»ÔÙÌṩ¼ÛÖµµÄ²âÊÔÉÏ¡£

Writing Clean Test Code

¾ÍÏñÒ»°ã±àд´úÂëÒ»Ñù£¬Ð´³öÁ¼ºÃºÍ¸É¾»µÄ²âÊÔ´úÂëÐèÒª·Ç³£Ï¸ÐÄ¡£

ÔÚ¼ÌÐø֮ǰÌá³ö¿Éά»¤µÄ²âÊÔ´úÂëÒÔ¼°ÔÚ×Ô¶¯»¯²âÊÔÌ×¼þÖÐÆƽ⣬ÒÔÏÂÊÇһЩ¸ü¶àÌáʾ£º

1¡¢²âÊÔ´úÂëÓëÉú²ú´úÂëÒ»ÑùÖØÒª¡£ ¸øËüͬÑùµÄ¹Ø×¢¡£ ¡°ÕâÖ»ÊDzâÊÔ´úÂ롱²»ÊÇÖ¤Ã÷²ÝÂÊ´úÂëºÏÀíµÄÀíÓÉ

2¡¢Ã¿¸ö²âÊÔ²âÊÔÒ»¸öÌõ¼þ¡£ Õâ¿ÉÒÔ°ïÖúÄã±£³Ö²âÊÔ¼ò¶Ì²¢ÇÒÈÝÒ×ÍÆÀí

3¡¢¡°°²ÅÅ£¬²ÉÈ¡Ðж¯£¬¶ÏÑÔ¡±»ò¡°µ±Ê±£¬ÄÇô¡±ÊǺܺõÄÖú¼Ç·û£¬¿ÉÒÔÈÃÄãµÄ²âÊÔ±£³ÖÁ¼ºÃµÄ½á¹¹

4¡¢¿É¶ÁÐÔºÜÖØÒª¡£ ²»ÒªÊÔͼ¹ý¶ÈDRY£¨Don¡¯t repeat yourself£©¡£ ¸´ÖÆÊÇ¿ÉÒԵģ¬Èç¹ûËüÌá¸ß¿É¶ÁÐԵĻ°¡£ ³¢ÊÔÔÚDRYºÍDAMP´úÂëÖ®¼äÕÒµ½Æ½ºâµã

5¡¢Èç¹ûÓÐÒÉÎÊ£¬ÇëʹÓÃÈýÌõ¹æÔòÀ´¾ö¶¨ºÎʱÖع¹¡£ ÖØÓÃ֮ǰʹÓÃ

½áÂÛ

¾ÍÕâÑù£¡ÎÒÖªµÀÕâÊÇÒ»¸öÂþ³¤¶ø¼èÄѵÄÔĶÁ£¬½âÊÍΪʲôÒÔ¼°ÈçºÎ²âÊÔÄãµÄÈí¼þ¡£ ºÃÏûÏ¢ÊÇ£¬ÕâЩÐÅÏ¢Êdz־ÃÓÐÓõģ¬²¢ÇÒÎÞÂÛÄãÕýÔÚ¹¹½¨Ê²Ã´ÑùÑùµÄÈí¼þ¡£ ÎÞÂÛÄúÊÇ´ÓÊÂ΢·þÎñÁìÓò£¬ÎïÁªÍøÉ豸£¬Òƶ¯Ó¦ÓóÌÐò»¹ÊÇWebÓ¦ÓóÌÐò£¬ÕâЩÎÄÕµĽÌѵ¶¼¿ÉÒÔÓ¦Óõ½ËùÓÐÕâЩÁìÓò¡£

 
   
3202 ´Îä¯ÀÀ       18
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îпγ̼ƻ®
ÐÅÏ¢¼Ü¹¹½¨Ä££¨»ùÓÚUML+EA£©3-21[±±¾©]
Èí¼þ¼Ü¹¹Éè¼Æʦ 3-21[±±¾©]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 3-25[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼Æ 4-11[±±¾©]
SysMLºÍEAϵͳÉè¼ÆÓ뽨ģ 4-22[±±¾©]
DoDAF¹æ·¶¡¢Ä£ÐÍÓëʵÀý 5-23[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨²âÊÔ
΢·þÎñ¼Ü¹¹ÏµIJâÊÔÖ®µÀ
´ÓÁ㿪ʼÕÆÎÕ΢·þÎñÈí¼þ²âÊÔ
ÈçºÎ½øÐвâÊÔÐèÇó·ÖÎö£º´Ó½ÓÊÕÐèÇóµ½ÓÃÀýÉè¼Æ
python_selenium×Ô¶¯»¯²âÊÔ¿ò¼Ü
×îпγÌ
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀýÉè¼Æ
ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
×Ô¶¯»¯²âÊÔ¿ò¼ÜÉè¼Æ¸ß¼¶Êµ¼ù
½Ó¿Ú×Ô¶¯»¯²âÊÔ·½·¨Ó빤¾ß
Èí¼þ²âÊÔ·½·¨Óëʵ¼ù(¹á´©°¸Àý)
³É¹¦°¸Àý
ij֧¸¶ÆóÒµ µ¥Ôª²âÊÔÓëÖع¹Åàѵ
±±¾© Óû§ÌåÑé¡¢¿ÉÓÃÐÔ²âÊÔÓëÆÀ¹À
ij¾ü¹¤Ñо¿µ¥Î» ×Ô¶¯»¯²âÊÔ·½·¨¡¢°¸ÀýÓ빤¾ß
ÖªÃûÏû·Ñ½ðÈÚ¹«Ë¾ ̽Ë÷ÐÔ²âÊÔÓë²âÊÔ·ÖÎö
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦