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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃEspressoʵÏÖÍêÕû¸²¸ÇµÄApp¹¦ÄܲâÊÔ
 
×÷Õß ºÎÁºÎ° À´Ô´£ºInfoQ ·¢²¼ÓÚ£º 2017-5-10
  3755  次浏览      29
 

¶ÔÓÚ»ùÓÚ UI µÄ¹¦ÄܲâÊÔµÄÐèÇóÆäʵһֱ´æÔÚ£¬ÀíÓÉÆäʵºÜ¼òµ¥£¬²»ÏëÒ»Ö±ÈÃÈËÈ¥×öÖØ¸´»úеµÄÊÂÇ飬¶øÇÒ¿É¿¿ÐÔÍêÈ«ÊÇ¿¿ÈËÁ¦µÄ¶Ñ»ý²úÉú¡£È»¶øÏÖÔÚÐÐÒµ´ó¶àÊý¹«Ë¾µÄ¹¦ÄܲâÊÔ¹¤×÷ÒÀÈ»Ö÷ÒªÊÇÒÀ¿¿È˹¤À´Íê³É£¬´ÓÎÒÃǹ«Ë¾µÄʵ¼ùÀ´¿´ÎÒ¾õµÃÓм¸¸ö·½ÃæµÄÒòËØµÄÓ°Ïì¡£

֮ǰµÄ UI ²âÊÔ¿ò¼ÜµÄ±íÏÖ²îÇ¿ÈËÒâ¡£¾ÍÄÃÎÒÃǹ«Ë¾À´Ëµ£¬Æäʵ²âÊÔ²¿ÃÅÔÚÈ¥ÄêÒѾ­ÊµÏÖ²¢ÍƹãÒ»Ì×Ö÷Òª»ùÓÚ UIAutomator ʵÏֵIJâÊÔÆ½Ì¨£¬µ«ÓÉÓÚ¶Ô¸´ÔÓ¹¦ÄܵĴ¦ÀíÄÜÁ¦½ÏÈõ£¬»ù±¾Ö»ÄÜʵÏÖ²¿·Ö¹¦Äܵļì²â¡£ÕâÑùµ¼ÖµÄÒ»¸ö½á¹ûÊÇ£¬²¢²»ÄÜÓÐЧ¼õÉÙ²âÊԵŤ×÷£¬¶øÖ»ÄÜÔö¼Ó²âÊԵĶîÍ⹤×÷£¬Òò´Ë²âÊÔ±àд²âÊÔ´úÂëµÄ»ý¼«ÐÔ²»ÊǺܸߡ£Í¬Ê±ÓÉÓÚ²âÊÔ´úÂëµÄ¿ÉÖØ¸´ÀûÓÃÐԲµ¼Ö²âÊԽű¾µÄ±àд³É±¾ºÍά»¤³É±¾Æ«¸ß£¬Êµ¼ùÖдó¼ÒÖ»Óà UI ²âÊÔÅÜһЩÖ÷Á÷³ÌÒµÎñ£¬¸²¸Ç·¶Î§·Ç³£ÓÐÏÞ¡£

²¿·Ö²âÊÔÈËÔ±µÄ±àÂëÄÜÁ¦²»ÊǺÜÇ¿¡£ÓÉÓڴ󲿷ֲâÊÔÈËÔ±¿ÉÄܲ¢Ã»Óйý¶àµÄ¿ª·¢¾­Ñ飬ËùÒÔÔÚ±àд²âÊÔ´úÂëʱ²¢²»ÄܺÜ˳³©µÄÍê³É×Ô¼ºÏëÒªµÄЧ¹û£¬ÕâÑùÒ²»áµ¼Ö²âÊÔ´úÂëÏîÄ¿µÄÍÆ¹ã×èÁ¦»á±È½Ï´ó¡£

¶ÔÓÚÔõô±àд UI ²âÊÔ£¬²¢Ã»ÓÐÒ»¸ö±»´ó¼Ò½ÓÊÜÈϿɵÄ×î¼Ñʵ¼ù¡£ËäÈ»ÎÒÓà Espresso ʵÏÖÁËÒ»Ì×ÍêÕûµÄ¸²¸Ç·½°¸£¬µ«ÊÇÆäʵÎÒÓõķ½·¨ºÍ Google ¹Ù·½Ëù½¨ÒéµÄд·¨»¹ÊÇÓÐÂù¶à²îÒìµÄ¡£

¶Ô±ÈÉÏÃæµÄ¼¸¸öÒòËØ£¬ÎÒ¾õµÃ¸üΪÖ÷ÒªµÄÔ­Òò»¹ÊÇÔÚÓÚÏÖÓвâÊÔÆ½Ì¨¶ÔÓÚ¸´ÔÓÂß¼­´¦ÀíµÄÄÜÁ¦²»¹»£¬µ¼Ö¶ÔÓÚ UI ²âÊÔµÄÒÀÀµÐÔ½ö½ö¾ÖÏÞÔÚ°²×°²âÊԺͼæÈÝÐÔ²âÊÔ£¬Ö»ÄÜÓÃÀ´ÅÜһЩÖ÷Á÷³ÌµÄ¶«Î÷£¬¶ÔÓÚ´ó¶àÊý¹¦ÄÜ»¹Ö»ÄÜÒÀ¿¿È˹¤µÄ·½Ê½Íê³É¡£

Espresso

Espresso ÊÇ Google ÔÚ 2013 ÄêÍÆ³öµÄ Android UI ²âÊԵĿªÔ´¿ò¼Ü¡£Æäʵ֮ǰÎÒÃÇÍŶÓÒ²¶à¶àÉÙÉÙ¶Ô Espresso ÓйýһЩ³¢ÊÔ£¬µ«Òź¶µÄÊǶ¼Ã»ÓÐÉîÈëµÄ½øÐÐʵ¼ù¡£Ò»¼¾¶ÈÎÒÃǽ« UI ²âÊÔ×÷Ϊһ¸öºÜÃ÷È·µÄ¿ÓÀ´ÌîÒԺ󣬷¢ÏÖ Espresso ÒѾ­ºÜÇ¿´óÁË£¬¾­¹ýʵ¼ùÏÂÀ´ÎÒÃÇ·¢ÏÖÓà Espresso ʵÏÖ 80-90% µÄ¹¦ÄÜÐÔ¸²¸Ç²âÊÔ»ù±¾Ã»ÓÐʲôÎÊÌâ¡£¶øÇÒ Espresso µÄ²âÊԽű¾±àдÆðÀ´·Ç³£¼òµ¥£¬Èç¹û²âÊԺͿª·¢¹²Í¬À´Íê³É²âÊÔ´úÂëµÄ±àд£¬Äܹ»ÓÐÐ§Ìæ´ú²âÊÔ´óÁ¿µÄÖØ¸´»úеµÄ¹¤×÷¡£

ÏÂÃæÎÒ¾ÍÀ´ÃèÊöÒ»ÏÂÎÒÃÇÊÇÔõôÓà Espresso À´ÊµÏÖÕâÒ»ÑùÒ»¸öÍêÕû¸²¸ÇµÄ¹¦ÄÜÐÔ²âÊÔÆ½Ì¨¡£ÕâÆªÎÄÕ»ὲµ½Ò»Ð©ÔÚʹÓà Espresso ÖÐÓöµ½µÄ¿Ó£¬µ«ÊDz¢²»»áÔÚ How-to µÄÊÂÇéÉÏÃæ»¨Ì«¶àµÄ¾«Á¦£¬Èç¹ûÄã¶Ô Espresso »¹²»ÊǺÜÁ˽âµÄ»°£¬½¨ÒéÏÈÈ¥ ¹Ù·½Îĵµ Á˽âһЩ£¬²¢ÏȽøÐÐһЩ¼òµ¥µÄʵ¼ù¡£

ETP ²âÊÔ·½°¸

ÔÚ½éÉÜÎÒÃǵIJâÊÔÆ½Ì¨·½°¸Ö®Ç°£¬ÐèÒªÌáǰ˵Ã÷µÄÊÇ£¬ÎÒÃÇÔÚʹÓà Espresso µÄ·½Ê½¿ÉÄܺ͹ٷ½ Demo ÀïËùչʾµÄ·½Ê½²»ÍêȫһÑù¡£ÎªÁËÈÃÎÒÃÇдµÄ²âÊÔ´úÂëÄܹ»¸ü¼ÓÁé»îºÍ·½±ãµÄ±»¸´ÓÃÔÚ²»Í¬µÄ²âÊÔÓÃÀýÖУ¬´Ó¶øÊµÏÖ¸üµÍ³É±¾µÄÈ«¹¦Äܸ²¸Ç£¬ÎÒÃǽøÐÐÁËһЩ·½°¸Éè¼Æ£¬×îºóʵÏÖÁËÎÒÃÇÏÖÔڵIJâÊÔÆ½Ì¨¡£

¸øÎÒÃǵIJâÊÔ·½°¸È¡ÁËÒ»¸ö¸ß´óÉϵÄÃû³Æ¡ª¡ªETP ²âÊÔ·½°¸£¬Ò²¾ÍÊÇ Espresso Test Platform µÄ¼ò³Æ¡£´ó¼ÒÈç¹û¿´¹ý Google ¹Ù·½µÄ Demo µÄ»°£¬¾ÍÓ¦¸ÃÄÜÀí½â¹Ù·½µÄ˼·ÆäʵÊÇÿ¸ö²âÊÔÊÇÍê³ÉÒ»ÌõÍêÕûµÄÂß¼­²âÊÔ£¬±ÈÈçÍê³ÉÌí¼ÓÒ»¸ö±Ê¼ÇµÄ²âÊÔÂß¼­¡£

ÕâÑùµÄ²âÊÔÁ÷³Ì×ܽáÏÂÀ´ÓÐÁ½¸ö±È½ÏÃ÷ÏÔµÄÎÊÌ⣺

ÿÌõ²âÊÔÓÃÀýÐèÒªµ¥¶À±àд£¬´úÂëµÄ¸´ÓÃÐԲµ¼Ö±àдµ¥Ôª²âÊԵijɱ¾½Ï¸ß£¬ËäÈ» Google ¹Ù·½Ìá¹©Â¼ÖÆ²âÊԽű¾µÄ¹¦ÄÜ£¬µ«ÊÇÉú³ÉµÄ´úÂë¿ÉÓÃÐÔ²¢²»Ç¿£¬´ó¶àÊýÇé¿öÏ»¹ÊÇÐèÒª¿¿ÈËÀ´±àд¡£

¸´ÔÓ³¡¾°µÄ´¦ÀíÄÜÁ¦£¬ÕâÑùÒ»Ìõµ¥¶ÀµÄ²âÊÔÁ÷³ÌÈÝÒ×±»´¥·¢ÐԵĵ¯´°»òÕßÒýµ¼Ìáʾ´ò¶Ï£¬Èç¹ûÔÚµ¥Ìõ²âÊÔÖÐ×ö¹ý¶àµÄÅжϣ¬ÓÖ»áÈõ¥Ìõ²âÊÔÓÃÀý±äµÃÓ·Ö×£¬´Ó¶øÈÃËùÓеIJâÊÔÓÃÀý¶¼±äµÃÓ·Ö×¶øÇÒÄÑÓÚά»¤ºÍ¸üС£

µ¥Ò³Ãæ²âÊÔ

ÕâÊÇÎÒΪÎÒÃDzâÊÔÆ½Ì¨¶¨ÒåµÄÒ»¸ö»ù±¾²âÊÔµ¥Î»£¬Ò²ÊÇÎÒÃÇÕû¸ö²âÊÔ·½°¸ÀïÃæµÄÒ»¸öºËÐĸÅÄî¡£ÕâÀïÓÐÁ½¸ö·½ÃæÐèÒªÃ÷ȷһϡ£

ÓÐЩÈË»á˵ÕâÊÇ Espresso µÄ±ê׼д·¨£¬ÒòΪÄãÔÚ¶¨ÒåÒ»¸ö Espresso ²âÊÔÎļþʱ¾Í±ØÐëÒªÖ¸¶¨Ò»¸öÆô¶¯µÄ Activity¡£µ«ÊÇ´Ó¹Ù·½µÄ Demo À´¿´£¬ËûÃÇÇãÏòÓÚÕâ¸ö Activity ½ö½öÊÇÒ»¸öÈë¿Ú£¬ÄãÓ¦¸ÃÔÚÍê³ÉÒ»ÌõÍê³ÉµÄ²âÊÔÓÃÀý£¨Äã¿ÉÒÔ¸ù¾ÝÐèÒªÌø×ªµ½ÈκÎÒ³Ãæ£©ÒÔºóÔÙ½øÐÐÏàÓ¦ÑéÖ¤¡£µ«ÊÇÔÚÎÒÃǵÄÕâÀÆô¶¯µÄÕâ¸öÒ³Ãæ£¨¿ÉÒÔÊÇ Activity »òÕß Fragment£©ÒÔºó¾ÍÖ»×öµ±Ç°Ò³ÃæÏà¹ØµÄÂß¼­²âÊÔ£¬Èç¹ûÓÐÒ³ÃæÌø×ªÒ²½ö½öÊDzâÊÔÊÇ·ñÄܳɹ¦Ìø×ª£¬²»»áÔÙ¶ÔÓ¦µÄ½çÃæ²úÉú¸ü¶àµÄ½»»¥¡£

ÓÉÓÚ Espresso ÊÇ»ùÓÚ JUnit ʵÏֵģ¬ËùÒÔÄã¿ÉÒÔÕë¶Ôµ¥¸öÒ³Ãæ±àд¶à¸ö¶ÀÁ¢µÃ²âÊÔÓÃÀý£¬ËüÃÇ»áÒÔËæ»úµÄ˳Ðò±»µ÷Óá£ÔÚÎÒÃǵĵ¥Ò³Ãæ²âÊÔÖУ¬Ö»Óе¥Ò»µÄ²âÊÔÈë¿Ú£¬È»ºó˳ÐòÖ´ÐÐÕâ¸öÒ³ÃæÐèÒªÖ´ÐеÄËùÓвâÊÔ¡£

ÔÚµ¥Ò³Ãæ²âÊÔÖУ¬»á¸ù¾ÝÐèÇ󾡿ÉÄܸ²¸ÇÕâ¸öÒ³ÃæµÄËùÓеŦÄÜ¡£Õâ¸öʱºòÓÐÈË¿ÉÄÜ»á˵£¬ÔÚ²»Í¬µÄÓ¦ÓÃ״̬Ï£¨±ÈÈ磺µÇ¼ÊÇ·ñ£©£¬Í¨¹ý UI ²âÊÔËùÄܲúÉúµÄÂß¼­²¢²»Ò»Ö£¬Ôõô×öµ½È«¸²¸ÇÄÜ¡£ÎÒÃǵĽâ¾ö·½°¸ÊÇÔÚÕâ¸öÒ³ÃæµÄ²âÊÔ´úÂëÖУ¬ÐèҪȫ²¿¸²¸Ç¸ÃÒ³ÃæËùÓеÄÂß¼­·ÖÖ§£¬µ±¿ªÊ¼Ö´ÐÐÕâ¸öµ¥Ò³Ãæ²âÊÔµÄʱºò£¬ÊÇÔõôÑùµÄ״̬£¬¾Í½øÈëÔõÑùµÄÂß¼­·ÖÖ§¡£Õâ¸öʱºòÓÖÓÐÈË¿ªÊ¼ÓÐÒÉÎÊÁË£¬ÕâÑùÔõô×öµ½È«¹¦Äܸ²¸ÇÄØ¡£ÏëÏóÁ¦·á¸»µÄÈË¿ÉÄÜÒѾ­Ïëµ½Á˽â¾ö·½°¸£¬ÎÒÃÇÏȸøµ½Ò»ÕÅͼÆô·¢Ò»Ï£¬ºóÃæÔÙ½éÉÜÎÒÃÇÒýÈëµÄÏÂÒ»¸ö¸ÅÄ¡ª²âÊÔÁ÷¡£

PS£ºÈç¹ûʹÓÃµÄ MVP µÄģʽÀ´±àд´úÂëµÄ»°£¬Äã»á·¢ÏÖÔÚµ¥¸öÒ³ÃæÐèÒªÄÇЩÂß¼­ÊǷdz£ÇåÎúµÄ¡£

ËäÈ»ÉÏÃæÒѾ­Ã÷È·¶¨ÒåÁ˵¥Ò³Ãæ²âÊÔµÄд·¨£¬µ«ÊÇÔÚʵ¼ÊÓ¦Óùý³ÌÖУ¬»¹ÊÇ»áÓöµ½Ò»Ð©³¡¾°£¬²»ÔÚ¶¨ÒåÀïÃæ±»Ô¼Êø£¬Ó¦¸ÃÔõô´¦Àí»áÈÃÈ˲úÉúÒɻ󣬻á¶Ôµ¥Ò³Ãæ²âÊÔµÄÄÜÁ¦µÄ¸²¸ÇÐÔ²úÉú»³ÒÉ¡£ÏÂÃæÎÒÁгöÀ´µÄ¼¸ÖÖÇé¿ö³£¼ûµÄÇé¿öÀ´½âÊÍÓ¦¸ÃÔõô¼á³Öµ¥Ò³Ãæ²âÊÔ×÷Ϊ»ù±¾µ¥Î»¡£

Ò³Ãæ¹ØÁªÐÔ²âÊÔ

µ±Éæ¼°µ½Ò³Ã滥Ïà¹ØÁªµÄÂß¼­£¬Ò»¸öµäÐ͵ij¡¾°¾ÍÊÇÔÚ¶©ÔÄÒ³Ãæ¶©ÔÄÒ»¸öÈÎÎñ£¬È»ºóÔÚ¶©ÔÄÁбíÒ³ÐèÒª¼°Ê±ÏÔʾ×îÐÂÌí¼ÓµÄ¶©ÔÄÄÚÈÝ¡£¹Ù·½µÄÓÃÀýÊǰÑËü·ÅÔÚÒ»Ìõ²âÊÔÀïÃæ¾Í²»ÓÃ˵ÁË£¬ÔÚÎÒÃǵIJâÊÔ·½°¸ÀïÃæÓ¦¸ÃÔõô´¦Àí¡£

×îºóÎÒÃÇÑ¡ÔñµÄ·½°¸ÊÇ·Ö¿ª²âÊÔ£º

ÔÚ¶©ÔÄÒ³Ãæ½øÐж©ÔÄÏà¹Ø²âÊÔ£¬ÔÚÕâ¸öÒ³ÃæÖ»ÑéÖ¤ÊÇ·ñ¶©Ôijɹ¦¡£

ÔÚ¶©ÔÄÁбí½çÃæ£¬Í¨¹ýÄ£Äâ¶©ÔIJÙ×÷£¬·¢ËÍÒ»¸ö¶©Ôijɹ¦Í¨Öª¸øÕâ¸öÒ³Ãæ£¬²âÊÔ¸ÃÒ³ÃæÊÇ·ñ»á¼°Ê±ÏÔʾ×îÐµĶ©ÔÄÄÚÈÝ¡£

Activity ǶÌ×¶à¸ö Fragment

ÓÉÓÚ Espresso ÊÇÒÔ Activity ΪÈë¿ÚµÄ£¬ËùÒÔ¿ÉÄܻᵼÖ²úÉúһЩÎó»á£¬ÎÒÃǵĵ¥Ò³Ãæ¾ÍÊÇÍêÈ«¶ÔÓ¦µ½ Activity£¬ÆäʵÔÚÎÒÃǵÄÉè¼ÆÀïÃæµ¥Ò³Ãæ¶ÔÓ¦µ½µÄ¶ÀÁ¢×ÓÒ³ÃæµÄ£¬ËùÒÔ Fragment ¿ÉÒÔ×÷Ϊһ¸öµ¥¶ÀµÄ¡¸µ¥Ò³Ãæ²âÊÔ´æÔÚ¡¹¡£ÔÚÎÒÃǵÄÓ¦ÓÃÀïÃæ£¬Ê×½çÃæÓÐÈý¸ö tab£¬ËùÒÔ¼ÓÉÏ MainActivityTest Õâ¸öµ¥Ò³Ãæ²âÊÔÊ×½çÃæ×ܹ²ÓÐËĸöµ¥Ò³Ãæ²âÊÔ¡£

Ëæ»ú´¥·¢ÐÔÂß¼­

ÔÚÓ¦ÓÃÖÐÍê³ÉijЩÈÎÎñºó£¬»á·¢ËÍÒ»¸öÈ«¾ÖµÄ¹ã²¥£¬È»ºó»áÔÚºǫ́´¥·¢Ò»Ð©ºÍµ±Ç°Ò³ÃæÃ»ÓÐʲô¹ØÁªµ¯´°¡£ÕâÖÖ³¡¾°¶ÔÎÒÃÇµÄ UI ²âÊÔÊǸöÌôÕ½£¬ÓÉÓÚµÄËæ»úÐÔ£¬³ý·ÇÔÚÿ´Î¶¼×ö´óÁ¿Öظ´µÄÅжϣ¬·ñÔòºÜÈÝÒ×µ¼Ö UI ²âÊÔ±»ÖжÏʧ°Ü¡£

Õë¶ÔÕâÑùµÄ³¡¾°ÎÒÃÇÓиöС»ï°éÌáÁËÒ»¸öÌØ±ðºÃµÄ½â¾ö·½°¸£º

ΪÕâÐ©Ëæ»úµÄµ¯´°²âÊÔµ¥¶Àд²âÊÔ£¬¿ÉÒÔǶÈëµ½ÔÚÒµÎñÉÏÈÏΪºÏÀíµÄµ¥Ò³Ãæ²âÊÔÖÐ

Ò»°ãÕâÑùµÄ´¥·¢ÐԵĵ¯´°¶¼»áÓÐÏàÓ¦µÄÈ«¾ÖÐԵıäÁ¿ÓÃÀ´¿ØÖÆ£¬ÔÚÖ´ÐÐÆäËûµÄµ¥Ò³Ãæ²âÊÔµÄʱºò£¬ÔòÊÖ¶¯½«¶ÔÓ¦µÄ¿ØÖÆ¿ª¹Ø¹Ø±Õ¡£

²âÊÔÁ÷ºÍÈ«¹¦Äܸ²¸Ç

ÔÚÿ¸öÒ³ÃæµÄµ¥Ò³Ãæ²âÊÔ¶¼Íê³ÉÒԺ󣬽ÓÏÂÀ´µÄÈÎÎñ¾ÍÊÇÔõôÓÐЧµÄ½«ÕâЩµ¥Ò³Ãæ×éºÏÆðÀ´¡£ÔÚµ¥Ôª²âÊÔÖÐÿ¸öµ¥Ôª²âÊÔ¶¼ÊǶÀÁ¢µÄ£¬ËùÒÔÖ»Òª±£Ö¤ËùÓеIJâÊÔÓÃÀý±»Ö´Ðйý¾Í¿ÉÒÔÁË¡£µ«ÊÇÏÖÔÚÎÒÃǵÄÄ¿µÄÊÇʵÏÖ¹¦ÄܲâÊÔ£¬ËùÒÔÒ»¶¨»áÓÐһЩ״̬ϵÄÂß¼­ÐèÒª²âÊÔ¡£ÓÚÊÇÔÚµ¥Ò³ÃæµÄ»ù´¡ÉÏÎÒÃǼÓÈëÁ˲âÊÔÁ÷µÄ¸ÅÄî¡£

Ò»Ìõ²âÊÔÁ÷ÆäʵÊDz»Í¬µ¥Ò³Ãæ²âÊÔµÄ˳ÐòÖ´ÐС£Í¨¹ýÇ°ÃæµÄµ¥Ò³Ãæ²âÊÔÀ´ºó¶ÔÓ¦ÓõIJúÉúµÄÊä³ö£¬±ä³ÉºóÃæÒ»¸öµ¥Ò³Ãæ²âÊÔµÄÊäÈ루È磺ÔÚijÌõ²âÊÔÁ÷ÖÐÐèÒªÓ¦Óô¦ÓڵǼ״̬£¬Ôò¿ÉÒÔÔÚÕû¸ö²âÊÔÁ÷µÄµÚÒ»¸öµ¥Ò³Ãæ²âÊÔÓ¦¸ÃÊǵÇÂ¼Ò³Ãæ²âÊÔ£©¡£

µ¥Ìõ²âÊÔÁ÷¿ÉÒÔ¶ÔÓ¦µ½Ä³ÌõÒµÎñµÄÒ»ÌõÍêÕûÁ÷³Ì£¬Ò»°ã»á¸²¸Ç¶à¸ö²âÊÔÓÃÀý¡£

ͨ¹ý²»Í¬µÄ²âÊÔÁ÷£¬À´²âÊÔÍ¬Ò»Ò³ÃæÖв»Í¬µÄÂß¼­·ÖÖ§¡£

ͨ¹ý²âÊÔÁ÷µÄµþ¼ÓÀ´ÊµÏÖÈ«¹¦ÄܵIJâÊÔ¸²¸Ç¡£ÕâÀïµÄÂß¼­Êǵ±Ã¿¸öÒ³ÃæµÄËùÓÐÂß¼­¶¼±»²âÊÔ¹ý£¬ÔòʵÏÖÁËÈ«¹¦ÄܵIJâÊÔ¸²¸Ç¡£

Espresso µÄ¿Ó

ËäÈ» Espresso ÒѾ­ºÜÇ¿´óÁË£¬µ«ÊÇ´Ó2.2Õâ¸ö°æ±¾ÒÔºó£¬ÒѾ­ºÜ¾ÃûÓиüÐÐа汾ÁË£¬ÆäʵÀïÃæ»¹ÊÇÓкܶà¿ÓµÄ£¬ÔÚʹÓà Espresso µÄʱºòÐèÒª¾¡Á¿±ÜÃâ¡£

Idling ºóÃæÐèÒªÓÐ onView µÄ×èÈû²Ù×÷²ÅÄܲúÉúЧ¹û

ÔÚ¸Õ¿ªÊ¼½Ó´¥ IdlingResource µÄʱºò£¬¶ÔËü±§ÓÐÌ«¶àµÄ»ÃÏ룬ÒÔΪ¿ÉÒÔËÁÎ޼ɵ¬µÄ´¦ÀíÒì²½µÄÎÊÌ⣬ʹÓÃÖ®ºó²Å·¢ÏÖÎÊÌâÆäʵҲ²»ÉÙ£¬ÉõÖÁ»¹ÓÐһЩÃ÷Ï﵀ bug¡£

ÔÚ IdlingResource µÄ˵Ã÷ÎĵµÀï˵¿ÉÒÔ×ܽá³ÉÕâÑùÒ»¾ä»°you have to use Idling Resources to inform Espresso of the app¡¯s long-running operations.¡£ÔÚÕâÀïÎÒÃDz¢²»ÄܺÜÖ±°×µÄÀí½â³ö IdlingResource Ö»ÄÜÓÃÀ´µÈ´ý UI events¡£Ò²¾ÍÊÇ˵ÔÚ¹Ù·½µÄÉè¼ÆÀïÃæ£¬ÒªÊ¹Óà IdlingResource À´Î¬³Ö¶ÔÓ¦µÄºǫ́²Ù×÷£¬ºóÃæµÄ½ô¸ú×ÅÒ»Ìõ UI ²Ù×÷»òÑéÖ¤£¬·ñÔò½«²»»áÉúЧ¡£ÕâÑùµ¼ÖµĽá¹ûÊÇÔÚÒ»¸öºǫ́²Ù×÷Íê³ÉÒÔºóÊǹرյ±Ç°Ò³ÃæµÄ³¡¾°£¬¸ù±¾ÎÞ·¨²âÊÔ¡£

Èç¹ûÕâËãÊÇ Espresso µÄÌØÐԵϰ£¬ÏÂÃæÕâ¸ö¾ÍÊÇÒ»¸öÃ÷Ï﵀ bug¡£

²»Í¬Ïß³Ì IdlingResource µÄ bug

ÔÚ½øÐÐ UI ²âÊÔµÄʱºò£¬ÓÐÁ½¸öÖ÷Ïß³ÌÐè񻂿·Öһϣ¬Ò»¸öÊÇÖ÷ App ÔËÐеÄÖ÷Ị̈߳¨[main,5,main]£©£¬ÁíÒ»¸öÊÇ UI ²âÊÔÅܵÄÖ÷Ị̈߳¨[Instr: android.support.test.runner.AndroidJUnitRunner,5,main]£©¡£ÎÒÃÇ´¥·¢µÄUIʼþ¶¼ÊÇÔÚ App Ö÷Ïß³ÌÀïÃæÖ´Ðеģ¬Èç¹ûÎÒÃÇÏëÒªÔÚ App µÄÏß³ÌÀïÃæ×öһЩ²Ù×÷ÐèÒªÇл»µ½¶ÔÓ¦µÄÏ̲߳Ù×÷¡£ÈçÏÂÃæµÄ´úÂ룺

mActivityTestRule.getActivity().runOnUiThread
(new Runnable() {
@Override
public void run() {
LogUtils.d(TAG, "runOnUiThread..." +
Thread.currentThread());
TaskApi.Companion.getMyTasks(0, 10000, "",
new HSAPICallback
<TaskListResult>() {
public void onRequestSuccess(TaskListResult data,
int httpStatus,
Boolean fromCache) {
super.onRequestSuccess(data, httpStatus, fromCache);
mTasks = data.getDatas();
}
});
}
});

ÀíÂÛÉÏÕâÀï½øÐеÄÒì²½²Ù×÷Ó¦¸ÃºÍ App ÀïÃæÖ´ÐеÄÒì²½²Ù×÷ÊÇÒ»ÑùµÄ£¬¿ÉÒÔÓà IdlingResource È¥ÊØ»¤ÕâÑùÒ»¸öºǫ́²Ù×÷£¬µ«ÊÇʵ¼ÊʹÓÃÏÂÀ´£¬ËäÈ» IdlingResource ÒѾ­½ÓÊܵ½¶ÔÓ¦µÄÒì²½Íê³É»Øµ÷£¬µ«ÊDz¢Ã»Óлص÷µ½±»×¢²áµÄ ResourceCallback¡£

hasProperty Òì³£

Espresso ÓõÄÊÇ Hamcrest µÄÓï·¨À´½øÐеÄÑéÖ¤£¬ÀíÂÛÉÏÓ¦¸ÃÖ§³ÖËùÓÐ Hamcrest µÄд·¨£¬µ«Êǵ±ÎÒÃÇÔÚʹÓà hasProperty Õâ¸ö·½·¨µÄʱºò£¬»á·¢ÏÖÏÂÃæÕâÑùµÄ´íÎó¡£ÕâÖ÷ÒªÊÇÓÉÓÚ Android SDK ÀïÃæ²¢Ã»ÓÐÍêÕû JDK µÄ¿â£¬ÎÒÃÇÓõ½Õⲿ·Ö¸ÕºÃÔÚ Android SDK ûÓС£

java.lang.NoClassDefFoundError:
Failed resolution of: Ljava/beans/Introspector;
at org.hamcrest.beans.PropertyUtil.propertyDescriptorsFor
(PropertyUtil.java:47)
at org.hamcrest.beans.PropertyUtil.getPropertyDescriptor
(PropertyUtil.java:28)
at org.hamcrest.beans.HasPropertyWithValue.propertyOn
(HasPropertyWithValue.java:94)
at org.hamcrest.beans.HasPropertyWithValue.matchesSafely
(HasPropertyWithValue.java:81)
at org.hamcrest.TypeSafeDiagnosingMatcher.matches(
TypeSafeDiagnosingMatcher.java:55)
at org.hamcrest.core.AllOf.matches(AllOf.java:27)
at org.hamcrest.DiagnosingMatcher.matches
(DiagnosingMatcher.java:12)
at android.support.test.espresso.action.
AdapterDataLoaderAction.
perform(AdapterDataLoaderAction.java:83)
at android.support.test.espresso.ViewInteraction$1.run
(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.
call(Executors.java:422)
at java.util.concurrent.FutureTask.
run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)

¸ù¾Ý Android espresso onData error

ÕâÆªÎÄÕ¿ÉÒÔÕÒµ½¶ÔÓ¦µÄ½â¾ö·½°¸£¬µ«ÊÇʵ¼ÊʹÓÃÏÂÀ´Ð§¹û²¢²»ºÃ£¬Ö÷ÒªÊÇ gradle µÄ Android ²å¼þÔÚ²»Í¬µÄ°æ±¾ÀïÃæ¶ÔÓÚÒýÈë Java Core µÄ´úÂë´¦Àí·½Ê½Óвî±ð£¬¶øÇÒÎÒÓÃµÄ 2.2.3 µÄ°æ±¾¸ù±¾¾Í²»ÄÜÓã¬ËùÒÔÕâÀïµÄ½¨ÒéÈÆ¹ý²»ÒªÊ¹ÓÃÕâ¸ö·½·¨£¬ÎÒÃÇ×îºóÊÇͨ¹ý×Ô¼º¶¨ÒåÁËÒ»¸ö Match À´½â¾öÕâ¸öÎÊÌâµÄ¡£

   
3755 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

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

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

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù