锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲国产日本综合,中文字幕一区二区三区四区五区 ,日韩欧美亚洲国产一区http://www.aygfsteel.com/lihao336/category/41306.html鎴愪簬鍧氬繊錛屾瘉浜庢誕韜?/description>zh-cnSat, 30 Oct 2010 06:00:56 GMTSat, 30 Oct 2010 06:00:56 GMT60mockobjecthttp://www.aygfsteel.com/lihao336/articles/291353.htmlcalvincalvinSun, 16 Aug 2009 08:16:00 GMThttp://www.aygfsteel.com/lihao336/articles/291353.htmlhttp://www.aygfsteel.com/lihao336/comments/291353.htmlhttp://www.aygfsteel.com/lihao336/articles/291353.html#Feedback0http://www.aygfsteel.com/lihao336/comments/commentRss/291353.htmlhttp://www.aygfsteel.com/lihao336/services/trackbacks/291353.html璁よ瘑Mock Object
Tag錛?a >鎶鏈墠娌?/a>

鐗堟潈澹版槑錛氳漿杞芥椂璇蜂互瓚呴摼鎺ュ艦寮忔爣鏄庢枃绔犲師濮嬪嚭澶勫拰浣滆呬俊鎭強鏈0鏄?/a>
http://bigwhite.blogbus.com/logs/535124.html

 

涓婂懆鍏垜浠?/span>Dominoo group璁ㄨ錛堜互涓嬬О璁ㄨ錛?/span>TDD鍜?/span>JUnit鐨勬椂鍊欙紝鎻愬埌榪?/span>Mock Object錛岄偅嬈″彲鑳芥槸鎴戠涓嬈″惉鍒?/span>Mock Object榪欎釜姒傚康錛岀▼搴忓憳瀵規柊椴滅殑鐨勪笢瑗塊兘鏄晱鎰熺殑錛屾墍浠ヤ粖澶╂櫄涓婅姳浜嗕竴浜涙椂闂翠簡瑙d簡涓涓?/span>Mock Object鐨勬蹇碉紝鍋氫簡涓浜涚畝鍗曞疄璺點?/span>

 

鏈

Tested Object – 琚祴瀵硅薄

Mock – 鍋囩殑 or 浠垮埗鐨勫璞?/span>

 

What is Mock Object?

鍦ㄨ璁轟腑鎴戝ぇ鑷翠簡瑙e埌Mock Object涓鑸槸鐢ㄦ潵鍋氳緟鍔╁崟鍏冩祴璇曪紝瀹冭礋璐i殧紱?/span>Tested Object涓庣湡瀹炵幆澧冧腑妯″潡鎴栧疄浣?/span>(Real world object)鐨勪氦浜掞紝騫?#8220;鏇夸唬”or “鍐掑厖榪欎簺鐪熷疄妯″潡鎴栧疄浣撲笌Tested Object榪涜浜や簰銆?/span>

鍦?#8220;JUnit in action”榪欐湰涔︿腑鍏充簬Mock Object鐨勬弿榪板涓嬶細

A mock object (or mock for short) is an object created to stand in for an object that your code will be collaborating with. Your code can call methods on the mock object, which will deliver results as set up by your tests.

 

Mock Object緇欐垜甯︽潵浠涔堝ソ澶勶紵

 

鐪嬬湅涓嬮潰鐨勫浘錛?/span>

|-----------------------------------------------------------------|

|                                                                                         |                   

|      |---------------------|                                                  |             |-----------------------------|

|      |   Tested             | <------------------------------------------à | External Mock Object |

|      |      Object            |                                                    |            |----------------------------|

|      |---------------------|                                                 |

|                   /|\               |--------------------|                       |

|                    |-------銆?|  Internal Mock    |                       |

|                                     |     Object           |                       |

|                                     |--------------------|                    |

|      [Your system scope]                                                  |

|--------------------------------------------------------- --------|

 

鍦ㄦ祴璇曚綘鐨?/span>Tested Object鏃訛紝浣犲彲鑳戒細涓庝綘緋葷粺鍐呯殑鏌愪釜妯″潡鎴栫郴緇熷鏌愪釜瀹炰綋浜や簰錛岃岃繖浜涙ā鍧楁垨瀹炰綋鍦ㄤ綘鍋氬崟鍏冩祴璇曠殑鏃跺欏彲鑳藉茍涓嶅瓨鍦紝榪欐椂錛?/span>

Ø         Internal Mock Object鍙兘鏄竴涓綘鐨勭郴緇熷皻鏈畬鎴愮殑妯″潡鐨?#8220;鏇胯韓”(replacement)錛?/span>

Ø         External Mock Object鍙兘鏄祴璇曚綘鐨?/span>Tested Object鏃墮渶瑕佺殑澶栭儴鐨勭幆澧冨疄浣撶殑“鏇胯韓”錛?/span>replacement錛夈?/span>

涓嶇煡閬撹繖鏍風粰Mock Object鍒嗙被鏄惁姝g‘J

 

鎴戜滑鏉ョ湅鐪嬩笌Real world object浜や簰鏈変粈涔堜笉瓚充箣澶勶細

Ø         Real world object鐨勮涓哄叿鏈変笉紜畾鎬э紝鎴戜滑闅句簬鎺у埗瀹冧滑鐨勮緭鍑?/span>or榪斿洖緇撴灉銆?/span>

Ø         Real world object鏈変簺鏃跺欐槸闅句簬琚緩绔嬬殑鎴栬呰鏄棤娉曡幏寰楃殑銆?/span>

Ø         Real world object鐨勬湁浜涜涓洪毦浜庤瑙﹀彂錛屽紓佺洏宸叉弧錛岀綉緇?/span>error絳夈?/span>

Ø         Real world object鍙兘涓嶅瓨鍦紝姣斿浣犵殑Tested Object闇瑕佷笌浣犵殑緋葷粺鐨勫彟涓涓?/span>module浜や簰錛岃屽彟涓涓?/span>module灝氭湭寮鍙戝畬姣曘?/span>

 

褰撶劧榪樹笉姝㈣繖浜涳紝鎴戜滑浠呬粎鏄垪鍑轟竴閮ㄥ垎銆?/span>

 

浣跨敤Mock Object鏇夸唬Real world object鍚庢垜浠氨浼氳В鍐充笂榪伴棶棰橈紝鎹㈠彞璇濊褰撲笂闈㈢殑鎯呭喌鍑虹幇鍚庯紝鎴戜滑灝卞彲浠ヤ嬌鐢?/span>Mock Object銆傝繖涔熸槸浠涔堟椂鍊欒浣跨敤Mock Object鐨?/span>answer銆?/span>

Mock Object鏄垜浠嚜宸辯紪鍐欑殑錛屾垜浠嫢鏈夋帶鍒跺畠鐨勭粷瀵圭殑鏉冨姏錛屾垜浠彲浠ュ畾鍒跺畠鐨勮涓哄拰杈撳嚭銆?/span>

 

Use Mock Object

浣跨敤Mock Object瑙e喅涓婅堪闂鍙垎涓夋璧幫細

 

1. Use an interface to describe the object

2. Implement the interface for production code

3. Implement the interface in a mock object for testing [3]

榪樻湁涓鐐瑰氨鏄浜?/span>Internal Mock Object鏃╂櫄浣犺瀹炵幇鍑哄叾Real world object鐨勶紝鍥犱負閭f槸浣犵郴緇熺殑涓閮ㄥ垎銆?/span>

 

涓涓敼鑷祫鏂?/span>[3]鐨勪緥瀛?/span>

public interface Environmental {

public long getTime();

// Other methods omitted...

}

瀵逛簬榪欐牱涓涓帴鍙o紝鎴戜滑鎻愪緵涓ょ瀹炵幇,

//real world object

public class SystemEnvironment implements Environmental {

public long getTime() {

return System.currentTimeMillis();

}

// other methods ...

}

 

//mock object

public class MockSystemEnvironment implements Environmental {

public long getTime() {

return currentTime;

}

public void setTime(Time aTime){

         this.currentTime = aTime;

}

private Time currentTime;

//others

}

鎴戜滑鍙互鐪嬪埌鍦?/span>MockSystemEnvironment涓垜浠彁渚?#8220;setTime”鍑芥暟鏄負浜嗘彁渚涙帶鍒?/span>Mock Object鐨勬帴鍙c?/span>

 

鎴戜滑瑕佹祴璇曠殑綾?/span>

//TestedObject

public class TestedObject{

         private Environmental env;

         TestedObject(Environmental aEnv){

                   this.env = aEnv;

}

public boolean isAm(){

         Calendar cal = Calendar.getInstance();

cal.setTimeInMillis(env.getTime());

int hour = cal.get(Calendar.HOUR_OF_DAY);

         if (hour <=12) return true;

         return false;

}

}

 

灝嗚嫻嬭瘯鐨勭被鏀懼叆鍗曞厓嫻嬭瘯妗嗘灦

public class TestTestedObject extends TestCase {

        public void testIsAm(){

                  MockSystemEnvironment env = new MockSystemEnvironment();

                   // Set up a target test time

Calendar cal = Calendar.getInstance();

cal.set(Calendar.YEAR, 2004);

cal.set(Calendar.MONTH, 10);

cal.set(Calendar.DAY_OF_MONTH, 1);

cal.set(Calendar.HOUR_OF_DAY, 16);

cal.set(Calendar.MINUTE, 55);

long t1 = cal.getTimeInMillis();

env.setTime(t1);

 

                   TestedObject to = new TestedObject(env);

                   assertFalse(to.isAm());

}

}

鍦ㄨ鍗曞厓嫻嬭瘯涓垜浠嬌鐢ㄤ簡Mock Object,騫朵笖鍦ㄤ嬌鐢ㄥ墠鎴戜滑鍒╃敤setTime鎺ュ彛錛岃緭鍏ヤ簡鎴戜滑闇瑕佺殑鍊箋傜粨鏋滄垜浠細閫氳繃嫻嬭瘯銆傚鏋滄垜浠嬌鐢?/span>Real Object錛屾垜浠緱鍒扮殑嫻嬭瘯緇撴灉灝嗘槸涓嶅浐瀹氱殑錛屽悗鑰呭彲涓嶆槸鎵鏈熸湜鐨勩備粠榪欎釜渚嬪瓙涓綘涔熷簲璇ヤ綋浼氬埌Mock object鐨勪竴浜涘ソ澶勪簡銆?/span>

 

濡傛灉鎴戜滑鎬繪槸鎵嬪姩鍐欐垜浠渶瑕佺殑Mock Object錛岄偅灝嗘槸涓涓緢澶х殑宸ヤ綔閲忋傜幇鍦ㄤ笟鐣屾湁浜?/span>Mock Objects銆?/span>easy mock絳夊紑婧愭鏋剁殑鏀寔錛屾槸鎴戜滑緙栧啓Mock object鍙樺緱瓚婃潵瓚婂鏄撱?/span>

 

鍙傝冭祫鏂欙細

1銆併?/span>Test-Driven Development – A practical guide銆?/span>

2銆併?/span>JUnit in action銆?/span>

3銆併?/span>Pragmatic Unit Testing銆?/span>



calvin 2009-08-16 16:16 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 泉州市| 加查县| 阿拉尔市| 济源市| 威信县| 绥中县| 广水市| 商南县| 封开县| 广南县| 汝南县| 玉环县| 霍林郭勒市| 金坛市| 墨脱县| 泗水县| 彝良县| 漳州市| 合山市| 大庆市| 荆门市| 西和县| 铁力市| 洛阳市| 博白县| 五原县| 新民市| 昌乐县| 义马市| 江川县| 海丰县| 盈江县| 新源县| 西和县| 威信县| 固镇县| 连山| 九龙县| 澄迈县| 三明市| 石楼县|