¡¡¡¡²âÊÔÇý¶¯¿ª·¢ÊÇÈí¼þ¿ª·¢µÄÖØÒª²¿·Ö¡£Èç¹û´úÂë²»½øÐвâÊÔ£¬¾ÍÊDz»¿É¿¿µÄ¡£ËùÓдúÂ붼±ØÐë²âÊÔ£¬¶øÇÒÀíÏëÇé¿öÏÂÓ¦¸ÃÔÚ±àд´úÂë֮ǰ±àд²âÊÔ¡£µ«ÊÇ£¬ÓÐЩ¶«Î÷ÈÝÒײâÊÔ£¬ÓÐЩ¶«Î÷²»ÈÝÒס£Èç¹ûÒª±àдһ¸ö´ú±í»õ±ÒÖµµÄ¼òµ¥µÄÀ࣬ÄÇôºÜÈÝÒײâÊÔ°Ñ $1.23 ºÍ $2.8 Ïà¼ÓÊÇ·ñÄܹ»µÃ³ö $4.03£¬¶ø²»ÊÇ $3.03 »ò $4.029999998¡£²âÊÔÊÇ·ñ²»»á³öÏÖ $7.465 ÕâÑùµÄ»õ±ÒÖµÒ²²»Ì«À§ÄÑ¡£µ«ÊÇ£¬ÈçºÎ²âÊÔ°Ñ $7.50 ת»»Îª €5.88 µÄ·½·¨ÄØ£¨ÓÈÆäÊÇÔÚͨ¹ýÁ¬½ÓÊý¾Ý¿â²éѯËæʱ±ä¶¯µÄ»ãÂÊÐÅÏ¢µÄÇé¿öÏ£©£¿ÔÚÿ´ÎÔËÐгÌÐòʱ£¬amount.toEuros() µÄÕýÈ·½á¹û¶¼¿ÉÄÜÓб仯¡£
¡¡¡¡´ð°¸ÊÇ mock ¶ÔÏó¡£²âÊÔ²¢²»Í¨¹ýÁ¬½ÓÕæÕýµÄ·þÎñÆ÷À´»ñÈ¡×îеĻãÂÊÐÅÏ¢£¬¶øÊÇÁ¬½ÓÒ»¸ö mock ·þÎñÆ÷£¬Ëü×ÜÊÇ·µ»ØÏàͬµÄ»ãÂÊ¡£ÕâÑù¾Í¿ÉÒԵõ½¿ÉÔ¤²âµÄ½á¹û£¬¿ÉÒÔ¸ù¾ÝËü½øÐвâÊÔ¡£±Ï¾¹£¬²âÊÔµÄÄ¿±êÊÇ toEuros() ·½·¨ÖеÄÂß¼£¬¶ø²»ÊÇ·þÎñÆ÷ÊÇ·ñ·¢ËÍÕýÈ·µÄÖµ¡££¨ÄÇÊǹ¹½¨·þÎñÆ÷µÄ¿ª·¢ÈËÔ±Òª²ÙÐĵÄÊ£©¡£ÕâÖÖ mock ¶ÔÏóÓÐʱºò³ÆΪ fake¡£
¡¡¡¡mock ¶ÔÏó»¹ÓÐÖúÓÚ²âÊÔ´íÎóÌõ¼þ¡£ÀýÈ磬Èç¹û toEuros() ·½·¨ÊÔͼ»ñÈ¡×îеĻãÂÊ£¬µ«ÊÇÍøÂçÖжÏÁË£¬ÄÇô»á·¢Éúʲô£¿¿ÉÒÔ°ÑÒÔÌ«ÍøÏß´Ó¼ÆËã»úÉϰγöÀ´£¬È»ºóÔËÐвâÊÔ£¬µ«ÊDZàдһ¸öÄ£ÄâÍøÂç¹ÊÕ쵀 mock ¶ÔÏóʡʵöࡣ
¡¡¡¡mock ¶ÔÏ󻹿ÉÒÔ²âÊÔÀàµÄÐÐΪ¡£Í¨¹ý°Ñ¶ÏÑÔ·ÅÔÚ mock ´úÂëÖУ¬¿ÉÒÔ¼ì²éÒª²âÊԵĴúÂëÊÇ·ñÔÚÊʵ±µÄʱºò°ÑÊʵ±µÄ²ÎÊý´«µÝ¸øËüµÄÐ×÷Õß¡£¿ÉÒÔͨ¹ý mock ²é¿´ºÍ²âÊÔÀàµÄ˽Óв¿·Ö£¬¶ø²»ÐèҪͨ¹ý²»±ØÒªµÄ¹«¹²·½·¨¹«¿ªËüÃÇ¡£
¡¡¡¡×îºó£¬mock ¶ÔÏóÓÐÖúÓÚ´Ó²âÊÔÖÐÏû³ýÒÀÀµÏî¡£ËüÃÇʹ²âÊÔ¸üµ¥Ôª»¯¡£Éæ¼° mock ¶ÔÏóµÄ²âÊÔÖеÄʧ°ÜºÜ¿ÉÄÜÊÇÒª²âÊԵķ½·¨ÖеÄʧ°Ü£¬²»Ì«¿ÉÄÜÊÇÒÀÀµÏîÖеÄÎÊÌâ¡£ÕâÓÐÖúÓÚ¸ôÀëÎÊÌâºÍ¼ò»¯µ÷ÊÔ¡£
¡¡¡¡EasyMock ÊÇÒ»¸öÕë¶Ô Java ±à³ÌÓïÑԵĿª·ÅÔ´Âë mock ¶ÔÏó¿â£¬¿ÉÒÔ°ïÖúÄú¿ìËÙÇáËɵش´½¨ÓÃÓÚÕâЩÓÃ;µÄ mock ¶ÔÏó¡£EasyMock ʹÓö¯Ì¬´úÀí£¬ÈÃÄúÖ»ÓÃÒ»ÐдúÂë¾ÍÄܹ»´´½¨ÈκνӿڵĻù±¾ÊµÏÖ¡£Í¨¹ýÌí¼Ó EasyMock ÀàÀ©Õ¹£¬»¹¿ÉÒÔΪÀà´´½¨ mock¡£¿ÉÒÔÕë¶ÔÈκÎÓÃ;ÅäÖÃÕâЩ mock£¬´Ó·½·¨Ç©ÃûÖеļòµ¥ÑƲÎÊýµ½¼ìÑéһϵÁз½·¨µ÷ÓõĶàµ÷ÓòâÊÔ¡£
¡¡¡¡EasyMock ¼ò½é
¡¡¡¡ÏÖÔÚͨ¹ýÒ»¸ö¾ßÌåʾÀýÑÝʾ EasyMock µÄ¹¤×÷·½Ê½¡£Çåµ¥ 1 ÊÇÐé¹¹µÄ ExchangeRate ½Ó¿Ú¡£ÓëÈκνӿÚÒ»Ñù£¬½Ó¿Úֻ˵Ã÷ʵÀýÒª×öʲô£¬¶ø²»Ö¸¶¨Ó¦¸ÃÔõô×ö¡£ÀýÈ磬Ëü²¢Ã»ÓÐÖ¸¶¨´Ó Yahoo ½ðÈÚ·þÎñ¡¢Õþ¸®»¹ÊÇÆäËûµØ·½»ñÈ¡»ãÂÊÊý¾Ý¡£
¡¡¡¡Çåµ¥ 1. ExchangeRate
¡¡¡¡import java.io.IOException;
¡¡¡¡public interface ExchangeRate {
¡¡¡¡double getRate(String inputCurrency, String outputCurrency) throws IOException;
¡¡¡¡}
¡¡¡¡Çåµ¥ 2 ÊǼٶ¨µÄ Currency ÀàµÄ¹Ç¼Ü¡£Ëüʵ¼ÊÉÏÏ൱¸´ÔÓ£¬ºÜ¿ÉÄÜ°üº¬ bug¡££¨Äú²»±Ø²ÂÁË£ºÈ·ÊµÓÐ bug£¬Êµ¼ÊÉÏÓв»ÉÙ£©¡£
¡¡¡¡Çåµ¥ 2. Currency Àà
import java.io.IOException; public class Currency { private String units; private long amount; private int cents; public Currency(double amount, String code) { this.units = code; setAmount(amount); } private void setAmount(double amount) { this.amount = new Double(amount).longValue(); this.cents = (int) ((amount * 100.0) % 100); } public Currency toEuros(ExchangeRate converter) { if ("EUR".equals(units)) return this; else { double input = amount + cents/100.0; double rate; try { rate = converter.getRate(units, "EUR"); double output = input * rate; return new Currency(output, "EUR"); } catch (IOException ex) { return null; } } } public boolean equals(Object o) { if (o instanceof Currency) { Currency other = (Currency) o; return this.units.equals(other.units) && this.amount == other.amount && this.cents == other.cents; } return false; } public String toString() { return amount + "." + Math.abs(cents) + " " + units; } } |