锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧洲亚洲综合一区二区三区,亚洲综合色视频在线观看,亚洲日本国产综合高清http://m.tkk7.com/ashutc/category/46477.htmlj2eezh-cnWed, 29 Sep 2010 22:33:43 GMTWed, 29 Sep 2010 22:33:43 GMT60jWebUnit 妗嗘灦 嫻嬭瘯鐢ㄤ緥http://m.tkk7.com/ashutc/archive/2010/09/29/333401.html瑗跨摐瑗跨摐Wed, 29 Sep 2010 07:40:00 GMThttp://m.tkk7.com/ashutc/archive/2010/09/29/333401.htmlhttp://m.tkk7.com/ashutc/comments/333401.htmlhttp://m.tkk7.com/ashutc/archive/2010/09/29/333401.html#Feedback0http://m.tkk7.com/ashutc/comments/commentRss/333401.htmlhttp://m.tkk7.com/ashutc/services/trackbacks/333401.html

鑷姩嫻嬭瘯鍙互鑺傜渷閲嶅鎵ц鐩稿悓嫻嬭瘯姝ラ鐨? 鏃墮棿鍜岀簿鍔涖傛湰鏂囧皢浠嬬粛 jWebUnit錛岃繖鏄竴緇?Java 綾伙紝鐢ㄤ簬涓?Web 搴旂敤紼嬪簭寮鍙戞祴璇曠敤渚嬨俲WebUnit 鏄竴涓紑婧愰」鐩紝鍙互鍦? BSD 璁稿彲涓嬪厤璐硅幏寰椼傛垜灝嗕粙緇嶅浣曚笅杞?jWebUnit 搴撱侀厤緗?Eclipse 騫沖彴鏉ュ紑鍙?jWebUnit 嫻嬭瘯鐢ㄤ緥錛屼互鍙?qiáng)濡備綍鏋勫晦Z竴涓ず渚嬫祴璇曠敤渚嬨?/p>

jWebUnit 綆浠?/span>
jWebUnit 浠?HttpUnit錛堜竴涓繘琛?Web 搴旂敤紼嬪簭鑷姩嫻嬭瘯鐨?Java 搴擄級(jí)鍜?JUnit 鍗曞厓嫻嬭瘯妗嗘灦涓哄熀紜錛堣鍙傞槄 鍙傝冭祫鏂?/a>錛夈? jWebUnit 鎻愪緵浜嗗鑸?Web 搴旂敤紼嬪簭鐨勯珮綰? API錛屽茍緇勫悎浜嗕竴緇勬柇璦錛岀敤瀹冧滑鏉ラ獙璇侀摼鎺ュ鑸佽〃鍗曡緭鍏ラ」鍜屾彁浜ゃ佽〃鏍煎唴瀹逛互鍙?qiáng)鍏朵粬鍏稿瀷鍟嗗?Web 搴旂敤紼嬪簭鐗規(guī)х殑姝g‘鎬с?jWebUnit 浠? JAR 鏂囦歡褰㈠紡鎻愪緵鐨勶紝鍙互寰堝鏄撳湴灝嗗畠鎻掑叆澶у鏁?IDE 涓紝jWebUnit 涔熷寘鍚叾浠栧繀瑕佺殑搴撱?/p>

鐢?HttpUnit 榪涜嫻嬭瘯
瀵? Web 搴旂敤紼嬪簭鑷姩榪涜嫻嬭瘯鎰忓懗鐫璺寵繃 Web 嫻忚鍣紝閫氳繃紼嬪簭鏉ュ鐞?Web 绔欑偣銆傞鍏堬紝鎴戣浠嬬粛 HttpUnit錛圝WebUnit 鐨勬瀯寤哄潡涔嬩竴錛夋槸濡備綍綆鍖栬繖欏瑰伐浣滅殑銆侶ttpUnit 鍙互妯℃嫙甯с丣avaScript銆侀〉闈㈤噸瀹氬悜 cookie錛岀瓑絳夈傚湪灝?HttpUnit 鐢ㄤ簬 JUnit 鏃訛紝瀹冨彲浠ヨ繀閫熷湴瀵?Web 绔欑偣鐨勫姛鑳借繘琛岄獙璇併?/p>

娓呭崟 1 鏄劇ず浜嗕竴涓敤 HttpUnit 緙栧啓鐨勬祴璇曠敤渚嬶紝瀹冭瘯鍥懼崟鍑?HttpUnit 涓婚〉涓婄殑“Cookbook”閾炬帴錛?/p> 娓呭崟 1. 鍗曞嚮 HttpUnit 涓婚〉涓?Cookbook 閾炬帴鐨?HttpUnit 浠g爜

            1 public class HttpUnitTest {
            2  public static void main(String[] args) {
            3    try {
            4      WebConversation wc = new WebConversation();
            5      WebRequest request =
            new GetMethodWebRequest("http://httpunit.sourceforge.net/index.html");
            6      wc.setProxyServer( "your.proxy.com", 80 );
            7      WebResponse response = wc.getResponse(request);
            8      WebLink httpunitLink =
            response.getFirstMatchingLink(WebLink.MATCH_CONTAINED_TEXT,"Cookbook");
            9      response = httpunitLink.click();
            10      System.out.println("Test successful !!");
            11    } catch (Exception e) {
            12      System.err.println("Exception: " + e);
            13    }
            14  }
            15 }
            

娓呭崟 1 涓殑浠g爜鐢?your.proxy.com 錛堢 6 琛岋級(jí)榪炴帴 Internet銆傚鏋滃瓨鍦ㄧ洿鎺?Internet 榪炴帴錛岄偅涔堝彲浠ユ妸榪欎釜璇彞娉ㄩ噴鎺夈傜 8 琛岀殑璇彞鍦ㄩ〉闈腑鎼滅儲(chǔ)鍖呭惈鏂囨湰 Cookbook 鐨?Web 閾炬帴銆傜 9 琛岀殑璇彞鐢ㄤ簬鍗曞嚮榪欎釜閾炬帴銆傚鏋滄壘鍒伴摼鎺ワ紝閭d箞鐢ㄦ埛浼?xì)鐪嬪?Test Successful !! 榪欐潯娑堟伅銆?/p>

鐢?jWebUnit 榪涜鐨勬祴璇曟洿綆鍗?/span>
娓呭崟 2 鐨勬祴璇曠敤渚嬬敤 jWebUnit API 鎵ц鍜屾竻鍗?1 鐩稿悓鐨勪換鍔★細(xì)

娓呭崟 2. 鍗曞嚮 HttpUnit 涓婚〉涓?Cookbook 閾炬帴鐨?jWebUnit 浠g爜

            1 public class JWebUnitTest extends WebTestCase{
            2  public static void main(String[] args){
            3    junit.textui.TestRunner.run(new TestSuite(JWebUnitTest.class));
            4  }
            5  public void setUp(){
            6    getTestContext().setBaseUrl("http://httpunit.sourceforge.net");
            7    getTestContext().setProxyName("webproxy.watson.ibm.com");
            8    getTestContext().setProxyPort(8080);
            9  }
            10  public void testSearch(){
            11    beginAt("/index.html");
            12    clickLinkWithText("Cookbook");
            13  }
            14 }
            

濡傛灉娌℃敞鎰忔竻鍗?2 涓壒瀹氫簬 JUnit 鐨勪唬鐮侊紝閭d箞鎮(zhèn)ㄥ彲浠ョ湅鍒幫紝嫻嬭瘯鐢ㄤ緥鐜板湪鍙樺緱鐩稿綋鏁存磥銆佺畝緇冦傞渶瑕佹煡鐪嬬殑閲嶈鐨勮鏄 6 琛屻佺 11 琛屽拰絎?12 琛屻傚湪絎?6 琛岋紝鍩烘湰 URL 琚緗埌 HttpUnit 鐨勪富欏典腑銆傜 11 琛岀敤鐩稿璺緞 /index.html 榪炴帴绔欑偣銆傜 12 琛岀敤浜庡崟鍑婚〉闈笂鍏鋒湁鏂囨湰 Cookbook 鐨勯摼鎺ャ傚鏋滈摼鎺ユ湁鏁堬紝閭d箞 JUnit 浼?xì)鎶ュ憡鎴愬姛锛涘惁鍒欏Q孞Unit 浼?xì)鎶ュ憡寮傚父銆?/p>

jWebUnit API錛氳繘涓姝ヨ瀵?/span>
姣忎釜 jWebUnit 嫻嬭瘯鐨勬牳蹇冮兘鏄?net.sourceforge.jwebunit.WebTestCase 綾伙紝瀹冧唬琛ㄦ祴璇曠敤渚嬨傛瘡涓祴璇曠敤渚嬮兘蹇呴』鏄粠榪欎釜綾繪墿灞曡屾潵銆傦紙net.sourceforge.jwebunit.WebTestCase 綾繪湰韜垯鏄粠 junit.framework.TestCase 綾繪墿灞曡屾潵鐨勶紝瀹冨湪 JUnit 涓唬琛ㄦ祴璇曠敤渚嬨傦級(jí) 琛?1 鎻忚堪浜嗚繖涓被鐨勪竴浜涘父鐢ㄦ柟娉曪細(xì)

琛?1. net.sourceforge.jwebunit.WebTestCase 綾葷殑閲嶈鏂規(guī)硶
鏂規(guī)硶 璇存槑
public TestContext getTestContext() 寰楀埌嫻嬭瘯鐢ㄤ緥鐨勪笂涓嬫枃銆傚彲浠ョ敤瀹冭闂儚鍦板尯銆佸熀鏈?URL 鍜?cookie 涔嬬被鐨勯」鐩?/td>
public void beginAt(String relativeURL) 鍦ㄧ浉瀵逛簬鍩烘湰 URL 鐨?URL 澶勫紑濮嬪璇?/td>
public void setWorkingForm(String nameOrId) 涓庢寚瀹氱殑琛ㄥ崟寮濮嬩氦浜掋傚鏋滃綋鍓嶉〉闈㈠彧鏈変竴涓〃鍗曪紝灝變笉闇瑕佽皟鐢ㄨ繖涓柟娉?/td>
protected void submit() 鎻愪氦琛ㄥ崟 鈥斺?絳夊悓浜庡崟鍑昏〃鍗曠殑 鎻愪氦 鎸夐挳
public void gotoFrame(String frameName) 嬋媧誨懡鍚嶅撫

鍙︿竴涓噸瑕佺殑綾繪槸 net.sourceforge.jwebunit.TestContext銆傚畠涓烘祴璇曞垱寤轟笂涓嬫枃銆傚彲浠ョ敤榪欎釜綾繪潵澶勭悊鍍?cookie銆佷細(xì)璇濆拰鎺堟潈涔嬬被鐨勪俊鎭傝〃 2 鏄劇ず浜嗚繖涓被鐨勪竴浜涢噸瑕佹柟娉曪細(xì)

琛?2. net.sourceforge.jwebunit.TestContext 綾葷殑閲嶈鏂規(guī)硶
鏂規(guī)硶 璇存槑
public void addCookie(String name, String value) 鍚戞祴璇曚笂涓嬫枃涓坊鍔?cookie銆傚湪 HttpUnitDialog 寮濮嬫椂錛屾坊鍔犵殑 cookie 琚緗埌 WebConversation 涓?/td>
public void setResourceBundleName(String name) 涓烘祴璇曚笂涓嬫枃璁劇疆涓涓嬌鐢ㄧ殑璧勬簮緇戝畾銆傜敤浜庢寜鐓?WebTester 涓殑閿煡鎵炬湡鏈涚殑鍊?/td>
public void setProxyName(String proxyName) 涓烘祴璇曚笂涓嬫枃璁劇疆浠g悊鏈嶅姟鍣ㄥ悕縐?/td>
public void setBaseUrl(String url) 涓烘祴璇曚笂涓嬫枃璁劇疆鍩烘湰 URL

涓嬭澆 jWebUnit錛屽湪 Eclipse 涓厤緗?jWebUnit
jWebUnit 鏄敤綰?Java 浠g爜瀹炵幇鐨勶紝鎵浠ュ彲浠ヤ互 JAR 鏂囦歡鐨勫艦寮忚幏寰楀畠 錛堣鍙傞槄 鍙傝冭祫鏂?/a>錛屼粠涓幏寰椾笅杞介摼鎺ワ級(jí)銆傚湪瀹屾垚涓嬭澆涔嬪悗錛岃鎸変互涓嬫楠ゅ湪 Eclipse 騫沖彴涓婇厤緗?jWebUnit 搴擄細(xì)

  1. 鎶婁笅杞界殑鏂囦歡 jwebunit-1.2.zip 閲婃斁鍒頒復(fù)鏃剁洰褰曚腑錛堝亣璁炬槸 C:\temp錛夈?/li>
  2. 鍦?Eclipse 涓垱寤烘柊 Java 欏圭洰錛屽皢鍏跺懡鍚嶄負(fù) jWebUnit銆?/li>
  3. 鍙沖嚮 Package Explorer 瑙嗗浘涓殑 jWebUnit 欏圭洰錛岀劧鍚庨夋嫨 Properties銆?/li>
  4. 鍗曞嚮 Java Build Path銆傚崟鍑?Libraries 鏍囩涓殑 Add External JARs銆?/li>
  5. 嫻忚鍒?C:\temp\jwebunit-1.2\lib 鐩綍錛岄夋嫨榪欎釜鐩綍涓殑鎵鏈?JAR 鏂囦歡銆?/li>
  6. 鍗曞嚮 OK銆?/li>

鐜板湪鍙互鍦?Eclipse 涓殑 jWebUnit 欏圭洰涓嬪紑鍙?jWebUnit 嫻嬭瘯鐢ㄤ緥浜嗐?

鏋勫緩紺轟緥搴旂敤紼嬪簭
鐜板湪灝卞彲浠ユ煡鐪?jWebUnit API 鐨勫疄闄呭簲鐢ㄤ簡銆傛垜灝嗗甫鎮(zhèn)ㄧ爺絀朵竴涓ず渚嬪簲鐢ㄧ▼搴忥紝甯姪鎮(zhèn)ㄦ洿濂藉湴鐞嗚В jWebUnit 鐨勭湡姝e▉鍔涖傝繖涓簲鐢ㄧ▼搴忔槸涓涓祴璇曠敤渚嬶紝鐢ㄤ簬鎵撳紑涓涓?Google 鎼滅儲(chǔ)欏甸潰騫舵悳绱㈡枃鏈?HttpUnit銆傚簲鐢ㄧ▼搴忛渶瑕佹祴璇曚互涓嬪満鏅細(xì)

  • 鎵撳紑 Google 涓婚〉 http://www.google.com銆?br />
  • 紜畾璇ラ〉鍖呭惈涓涓悕涓?q 鐨勮〃鍗曞厓绱犮傦紙鍦?Google 鐨勪富欏典笂錛屽悕涓?q 鐨勬枃鏈鏄帴鍙楃敤鎴鋒煡璇㈣緭鍏ョ殑鏂囨湰妗嗐傦級(jí)搴旂敤紼嬪簭鐢ㄨ繖涓厓绱犺緭鍏ユ悳绱㈠弬鏁般?br />
  • 鍦ㄦ悳绱㈡枃鏈涓緭鍏ュ瓧絎︿覆 HttpUnit Home錛屽茍鎻愪氦琛ㄥ崟銆?br />
  • 鑾峰緱緇撴灉欏碉紝騫剁‘瀹氳欏甸潰鍖呭惈鐨勯摼鎺ヤ腑鍖呭惈鏂囨湰 HttpUnit Home銆?br />
  • 鍗曞嚮鍖呭惈鏂囨湰 HttpUnit Home 鐨勯摼鎺ャ?/li>

鐜板湪嫻嬭瘯鍦烘櫙宸茬粡灝辯華錛屽彲浠ョ紪鍐?Java 搴旂敤紼嬪簭錛岀敤 jWebUnit 瀹炵幇榪欎簺闇姹備簡銆?/p>

絎竴姝ユ槸澹版槑涓涓粠 WebTestCase 鎵╁睍鑰屾潵鐨勭被錛屽娓呭崟 3 鎵紺猴細(xì)

娓呭崟 3. 澹版槑嫻嬭瘯鐢ㄤ緥綾?/strong>

            public class GoogleTest extends WebTestCase {
            static String searchLink = "";
            }
            

姝e鎴戝湪鍓嶉潰鎻愬埌榪囩殑錛宩WebUnit 瑕佹眰姣忎釜嫻嬭瘯鐢ㄤ緥閮芥槸浠?WebTestCase 涓墿灞曡屾潵鐨勩?code>searchLink 淇濆瓨浼犲叆鐨勬悳绱㈠弬鏁般傝繖涓間互鍛戒護(hù)琛屽弬鏁扮殑褰㈠紡浼犻掔粰嫻嬭瘯鐢ㄤ緥銆?/p>

涓嬩竴姝ユ槸澹版槑鍏ュ彛鐐?鈥斺?main() 鏂規(guī)硶錛屽娓呭崟 4 鎵紺猴細(xì)

娓呭崟 4. main() 鏂規(guī)硶

            public static void main(String[] args) {
            searchLink = args[0];
            junit.textui.TestRunner.run(new TestSuite(GoogleTest.class));
            }
            

main() 鏂規(guī)硶璋冪敤 junit.textui.TestRunner.run() 鎵ц JTest 嫻嬭瘯鐢ㄤ緥銆傚洜涓洪渶瑕佽繍琛?GoogleTest 嫻嬭瘯鐢ㄤ緥錛屾墍浠ワ紝浣滀負(fù)鍙傛暟浼犻掔粰 run() 鏂規(guī)硶鐨勬祴璇曞浠墮噰鐢?GoogleTest.class 浣滀負(fù)鍙傛暟銆?/p>

鎺ヤ笅鏉ワ紝JTest 璋冪敤 setUp() 鏂規(guī)硶鏉ヨ緗熀鏈?URL 鍜屼唬鐞嗭紝濡傛竻鍗?5 鎵紺猴細(xì)

娓呭崟 5. 璁劇疆

            public void setUp() {
            getTestContext().setBaseUrl("http://www.google.com");
            getTestContext().setProxyName("proxy.host.com");
            getTestContext().setProxyPort(80);
            }
            

娓呭崟 5 鎶婂熀鏈?URL 璁劇疆涓?http://www.google.com銆傝繖鎰忓懗鐫嫻嬭瘯鐢ㄤ緥鐨勫惎鍔ㄦ槸鐩稿浜庤繖涓?URL 鐨勩備笅闈袱涓鍙ヨ緗繛鎺ュ埌 Internet 鐨勪唬鐞嗕富鏈哄拰浠g悊绔彛銆傚鏋滄槸鐩存帴榪炴帴鍒?Internet錛岄偅涔堝彲浠ュ拷鐣ヤ唬鐞嗚緗鍙ャ?/p>

鐜板湪寮濮嬫祻瑙堢珯鐐瑰茍杈撳叆鎼滅儲(chǔ)鍙傛暟銆傛竻鍗?6 鏄劇ず浜嗚闂?Web 欏甸潰錛岀劧鍚庢祴璇曟墍鏈夊満鏅殑浠g爜錛?/p> 娓呭崟 6. 嫻嬭瘯鎵鏈夊満鏅?/strong>

            public void testSearch() {
            beginAt("/");
            assertFormElementPresent("q");
            setFormElement("q", "HttpUnit");
            submit("btnG");
            assertLinkPresentWithText(searchLink);
            clickLinkWithText(searchLink);
            }
            

娓呭崟 6 鐨勪唬鐮佽繛鎺ュ埌鍩烘湰 URL錛屽茍鐩稿浜?/ 寮濮嬫祻瑙堛傜劧鍚庡畠鏂畾欏甸潰涓寘鍚竴涓悕涓?q 鐨勮〃鍗曞厓绱?鈥斺?q 鏄?Google 涓婚〉涓婃煡璇㈣緭鍏ユ枃鏈鐨勫悕縐般備笅涓鏉¤鍙ョ敤鍊?HttpUnit 璁劇疆鍚嶄負(fù) q 鐨勬枃鏈銆傚啀涓嬩竴鏉¤璦鎻愪氦琛ㄥ崟涓婂悕涓?btnG 鐨勬彁浜ゆ寜閽傦紙鍦?Google 鐨勪富欏典笂錛屽悕涓?btnG 鐨勬寜閽槸鏍囩涓?Google Search 鐨勬寜閽傦級(jí)琛ㄥ崟鏄湪榪欎釜瀵硅瘽涓彁浜ょ殑錛屼笅涓欏靛垪鍑烘悳绱㈢粨鏋溿傚湪緇撴灉欏甸潰涓婏紝浠g爜棣栧厛媯(gè)鏌ユ槸鍚︽湁涓涓摼鎺ョ殑鏂囨湰鏄?HttpUnit Home銆傚鏋滆閾炬帴涓嶅瓨鍦紝閭d箞嫻嬭瘯灝變互 AssertionFailedError 澶辮觸銆傚鏋滆閾炬帴瀛樺湪錛屽垯嫻嬭瘯鎵ц鐨勪笅涓涓搷浣滄槸鍗曞嚮閾炬帴銆?

榪愯紺轟緥搴旂敤紼嬪簭
鐜板湪鎶婄ず渚嬪簲鐢ㄧ▼搴忔姇鍏ヤ嬌鐢ㄥ綋涓細(xì)

  1. 涓嬭澆紺轟緥搴旂敤紼嬪簭 j-webunitsample.jar 錛堣鍙傞槄 涓嬭澆錛夈?br />
  2. 鍦ㄤ竴涓洰褰曚腑瑙e帇緙?j-webunitsample.jar銆備緥濡傦紝濡傛灉鎶婂畠閲婃斁鍒?C:\temp 涓紝閭d箞灝辮鎶婃簮鏂囦歡鍜岀被鏂囦歡鏀懼湪 C:\temp\com\jweb\test 涓紝鑰?setclasspth.bat 鍒欐斁鍦?C:\temp 涓?br />
  3. 緙栬緫 setclasspath.bat錛氳緗?JAR_BASE 鎸囧悜鍖呭惈鎵鏈夊繀闇 JAR 鏂囦歡鐨勭洰褰曘備緥濡傦紝濡傛灉鍦?C:\temp 涓噴鏀?jwebunit-1.2.zip 鏂囦歡錛岄偅涔堝皢 JAR_BASE 璁劇疆涓?C:\temp\jwebunit-1.2\lib銆?br />
  4. 鎵撳紑鍛戒護(hù)琛屾彁紺虹錛屽垏鎹㈠埌 C:\temp 鐩綍銆?br />
  5. 鎵ц setclasspath.bat銆傝繖浼?xì)璁揪|墽琛屾祴璇曠敤渚嬫墍闇鐨?CLASSPATH銆?br />
  6. 鐢ㄥ懡浠?java com.jweb.test.GoogleTest "HttpUnit Home" 榪愯搴旂敤紼嬪簭銆?/li>

紺轟緥杈撳嚭
鍦ㄦ墽琛屼簡嫻嬭瘯鐢ㄤ緥涔嬪悗錛屼細(xì)鍦ㄥ懡浠よ杈撳嚭涓涓祴璇曠敤渚嬫姤鍛娿傚鏋滄祴璇曞け璐ワ紝鎶ュ憡鐪嬭搗鏉ュ娓呭崟 7 涓墍紺猴細(xì)

娓呭崟 7. 甯︽湁鏂█澶辮觸鐨勮緭鍑?/strong>

            C:\temp>java com.jweb.test.GoogleTest "HttpUnit Hwee"
            .F
            Time: 5.338
            There was 1 failure:
            1) testSearch(com.jweb.test.GoogleTest)junit.framework.AssertionFailedError: Link
            with text [HttpUnit Hwee] not found in response.
            at net.sourceforge.jwebunit.WebTester.assertLinkPresentWithText(WebTester.java:618)
            at net.sourceforge.jwebunit.WebTestCase.assertLinkPresentWithText(WebTestCase.java:244)
            at com.jweb.test.GoogleTest.testSearch(GoogleTest.java:36)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at com.jweb.test.GoogleTest.main(GoogleTest.java:19)
            FAILURES!!!
            Tests run: 1,  Failures: 1,  Errors: 0
            

姝e鍦ㄦ竻鍗?7 涓彲浠ョ湅鍒扮殑錛屽彲浠ョ敤 HttpUnit Hwee 浣滀負(fù)鍙傛暟鏉ユ墽琛屾祴璇曠敤渚嬨傝繖涓祴璇曠敤渚嬮亣鍒版柇璦鐨勫湴鏂逛細(xì)澶辮觸錛屽洜涓虹粨鏋滈〉闈腑涓嶅寘鍚甫鏈夎繖涓枃鏈殑閾炬帴銆傜敱姝や篃灝變駭鐢熶簡junit.framework.AssertionFailedError銆?/p>

娓呭崟 8 鎵ц鏃剁敤 HttpUnit Home 浣滀負(fù)鍙傛暟銆傛祴璇曠敤渚嬫壘鍒頒竴涓甫鏈夎繖涓枃鏈殑閾炬帴錛屾墍浠ユ祴璇曢氳繃浜嗭細(xì)

娓呭崟 8. 鎴愬姛嫻嬭瘯鐨勮緭鍑?/strong>

            C:\temp>java com.jweb.test.GoogleTest "HttpUnit Home"
            .
            Time: 6.991
            OK (1 test)
            

緇撴潫璇?/span>
鏈? 鏂囬氳繃璁ㄨ jWebUnit 妗嗘灦鐨勪竴浜涚獊鍑虹壒鎬у拰鏈閲嶈鐨勭被錛屼粙緇嶅浣曠敤瀹冨垱寤虹畝媧佺殑嫻嬭瘯鐢ㄤ緥錛岃鎮(zhèn)ㄥ jWebUnit 妗嗘灦鏈変竴涓璇嗐俲WebUnit 榪樻湁鏇村鐗規(guī)у彲浠ョ敤鍦ㄦ祴璇曠敤渚嬩腑銆傚畠鏀寔嫻嬭瘯 Web 欏甸潰涓殑閾炬帴琛屾暟銆傚彲浠ュ瀛楃涓層佽〃鎴栬呭甫鏈夋寚瀹氭爣絳劇殑琛ㄥ崟杈撳叆鍏冪礌鏄惁瀛樺湪浜庨〉闈笂榪涜鏂█銆傛澶栵紝jWebUnit 榪樺彲浠ュ鐞?cookie 錛堜緥濡傛柇璦瀛樺湪鏌愪釜 cookie銆佸垹闄?cookie 絳夈傦級(jí)嫻嬭瘯鍙互瀵規(guī)煇涓枃鏈箣鍚庡嚭鐜扮殑鐗瑰畾鏂囨湰鐨勯摼鎺ヨ繘琛屽崟鍑匯?濡傛灉鎯充負(fù) Web 搴旂敤紼嬪簭鏋勫緩蹇屾湁鏁堢殑嫻嬭瘯鐢ㄤ緥錛宩WebUnit 鍙兘鏄?zhèn)ㄦ渶濂界殑鏈嬪弸銆?/p>
















瑗跨摐 2010-09-29 15:40 鍙戣〃璇勮
]]>
JUnit in javahttp://m.tkk7.com/ashutc/archive/2010/09/29/333382.html瑗跨摐瑗跨摐Wed, 29 Sep 2010 05:30:00 GMThttp://m.tkk7.com/ashutc/archive/2010/09/29/333382.htmlhttp://m.tkk7.com/ashutc/comments/333382.htmlhttp://m.tkk7.com/ashutc/archive/2010/09/29/333382.html#Feedback0http://m.tkk7.com/ashutc/comments/commentRss/333382.htmlhttp://m.tkk7.com/ashutc/services/trackbacks/333382.html闃呰鍏ㄦ枃

瑗跨摐 2010-09-29 13:30 鍙戣〃璇勮
]]>
spring 嫻嬭瘯鐢ㄤ緥http://m.tkk7.com/ashutc/archive/2010/09/29/333349.html瑗跨摐瑗跨摐Wed, 29 Sep 2010 05:25:00 GMThttp://m.tkk7.com/ashutc/archive/2010/09/29/333349.htmlhttp://m.tkk7.com/ashutc/comments/333349.htmlhttp://m.tkk7.com/ashutc/archive/2010/09/29/333349.html#Feedback0http://m.tkk7.com/ashutc/comments/commentRss/333349.htmlhttp://m.tkk7.com/ashutc/services/trackbacks/333349.html

綃囬璇?/span>

 

       鏈枃鍋囪璇昏呭凡緇忕啛鎮(zhèn)夊崟鍏冩祴璇曞強(qiáng)JUnit宸ュ叿鐨勪嬌鐢紝濡傛灉瀵瑰崟鍏冩祴璇曞強(qiáng)JUnit灝氫笉浜嗚В璇峰厛瀛︿範(fàn)鍗曞厓嫻嬭瘯鍙?/span>JUnit宸ュ叿鐨勭浉鍏崇煡璇嗐傝鑰呮渶濂藉Spring妗嗘灦鍙?/span>Spring妗嗘灦鎻愪緵鐨勫崟鍏冩祴璇曟敮鎸佹湁鎵浜嗚В錛屽洜涓烘湰鏂囨渚嬪熀浜?/span>Spring鎶鏈紪鍐欍備絾瀵?/span>Spring涓嶄簡瑙e茍涓嶅獎(jiǎng)鍝嶆湰鏂囨墍璁茶堪鐨勫崟鍏冩祴璇曠敤渚嬬紪鍐欏強(qiáng)鍥炶皟妯″紡銆佹ā鏉挎柟娉曠殑搴旂敤銆?/span>

 

       鍗曞厓嫻嬭瘯鏄紪鍐欓珮璐ㄩ噺浠g爜鐨勫墠鎻愶紝閫氳繃緙栧啓鏈夋晥鐨勫崟鍏冩祴璇曞嵆鍙互淇濊瘉浠g爜鐨勮川閲忓張鍙互鎻愰珮寮鍙戦熷害錛屽洜涓哄ぇ澶氭暟闂閮藉彲浠ラ氳繃鍗曞厓嫻嬭瘯鍙戠幇騫惰В鍐寵屼笉闇瑕侀儴緗插埌搴旂敤鏈嶅姟鍣ㄣ傜旱瑙堢綉涓婃祦琛岀殑浼樼寮婧愭鏋訛紝鏃犱竴涓嶆彁渚涘畬鏁寸殑鍗曞厓嫻嬭瘯鐢ㄤ緥銆?/span>Spring妗嗘灦渚挎槸鍏朵腑鐨勪唬琛ㄥ拰浣間郊鑰咃紝鍥犱負(fù)Spring鎵閬靛驚鐨勬帶鍒跺弽杞紙IoC錛夊拰渚濊禆娉ㄥ叆錛?/span>DI錛夊師鍒欎嬌緙栧啓鏈夋晥銆佸共鍑鐨勫崟鍏冩祴璇曠敤渚嬪彉寰楁洿鍔犳柟渚褲佸揩鎹楓?/span>

 緙栧啓鍗曞厓嫻嬭瘯鐢ㄤ緥

 

       鏈枃鎵閲囩敤鐨勬渚嬮潪甯哥畝鍗曪紝灝辨槸瀵規(guī)暟鎹簱琛ㄧ殑澧炪佸垹銆佹敼銆佹煡鎿嶄綔榪涜嫻嬭瘯銆傚亣璁炬垜浠湁榪欐牱涓涓〃url錛?/span>MySql鏁版嵁搴擄級(jí)錛?/span>

瀛楁

 

 

綾誨瀷

 

 

鎻忚堪

 

 

id

int

涓婚敭錛岃嚜澧炵被鍨?/font>

url

varchar

緗戠珯鍦板潃錛屽敮涓涓嶈兘閲嶅

email

varchar

Email鍦板潃

name

varchar

鍚嶇О

姝e浣犳墍瑙侊紝璇ヨ〃鍙湁鍑犱釜瀛楁錛屼絾瀵逛簬鎴戜滑鐨勬渚嬫潵璇村畬鍏ㄥ鐢ㄣ?/font>

 

 

       鐪嬪埌姝ゅ錛屼綘搴旇娓呮鎴戜滑鏄瀵規(guī)暟鎹簱鎿嶄綔榪涜鍗曞厓嫻嬭瘯銆傚鏋滀綘鏄竴浣嶇粡楠屼赴瀵岀殑寮鍙戜漢鍛橈紝姝ゆ椂宸茬粡浼?xì)鏈夎澶氱枒闂Q岀敋鑷沖凡緇忓け鍘葷戶緇槄璇繪湰鏂囩殑鍏磋叮錛?/span>

²        鍗曞厓嫻嬭瘯涓嶅簲璇ョ洿鎺ユ搷浣滄暟鎹簱錛?/font>

²        瀵規(guī)暟鎹簱鎿嶄綔鐨勫崟鍏冩祴璇曞彲浠ラ噰鐢?/span>DAO妯″紡錛?/span>Mock涓涓疄鐜扮被錛?/span>

²        浣跨敤鍐呭瓨鏁版嵁搴擄紵

²        鍏朵粬錛?/font>

 

 


鏁版嵁搴撹〃鏈変簡錛屾垜浠帴涓嬫潵緙栧啓DAO鍙?qiáng)鍏跺疄鐜熬c伙細(xì)

 

 

DAO鎺ュ彛錛?/span>

 

 

/**
* @author tao.youzt
*/
public interface BizUrlDAO {
public Object insert(BizUrlDO bizUrlDO);
public int delete(String url);
public BizUrlDO getByUrl(String url);
}

 

 

DAO瀹炵幇綾伙紝璇ョ被緇ф壙涓涓敮鎸佺被錛屽皝瑁呬簡瀵規(guī)暟鎹簱鐨勬搷浣溿?/span>

/**
* @author tao.youzt
*/
public class BizUrlIbatisImpl extends GodzillaDaoSupport implements BizUrlDAO {
private static final String GET_BY_URL = "Select-BIZ-URL";
private static final String Delete     = "Delete-BIZ-URL";
private static final String Insert     = "Insert-BIZ-URL";
public int delete(String url) {
return this.delete(Delete, url);
}
public BizUrlDO getByUrl(String url) {
return this.queryForObject(GET_BY_URL, url, BizUrlDO.class);
}
public Object insert(BizUrlDO bizUrlDO) {
return this.insert(Insert, bizUrlDO);
}
}

DO棰嗗煙瀵硅薄

 

 

/**
* @author tao.youzt
*/
public class BizUrlDO {
private int    id;
private String url;
private String email;
private String name;
// getter and setter
}

鍥犱負(fù)鏈枃妗堜緥浣跨敤Spring浣滀負(fù)搴曞眰妗嗘灦錛屽洜姝よ繖閲岄渶瑕佺紪鍐?/span>Spring閰嶇疆鏂囦歡瀵?/span>DAO榪涜緇勮銆?/span>

DAO鍙?qiáng)鍏堕厤缃枃錃g閮藉凡緇忓噯澶囧畬姣曪紝鎴戜滑鎺ヤ笅鏉ョ紪鍐欐祴璇曠敤渚嬨?/span>Spring涓哄崟鍏冩祴璇曟彁渚涗簡寰堝鏈夌敤鐨勬敮鎸佺被錛屾垜浠湪榪欓噷浣跨敤鐨勬槸錛?/span>

org.springframework.test.AbstractDependencyInjectionSpringContextTests

 

 

璇ョ被鎻愪緵浜?/span>POJO灞炴ц嚜鍔ㄦ敞鍏ョ殑鑳藉姏錛屽彧瑕佷負(fù)涓轟綘鐨勫睘鎬у瓧孌墊彁渚涗竴涓?/span>Set鏂規(guī)硶鍗沖彲銆備笅闈㈡垜浠潵鐪嬪畬鏁寸殑嫻嬭瘯鐢ㄤ緥錛?/span>

/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
public void testInsert(){
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
public void testDuplicateInsert(){
bizUrlDAO.insert(generateDO());
try{
bizUrlDAO.insert(generateDO());
assertFalse("Must throw an exception!",true);
}catch(Exception e){
assertTrue(true);
}
}
public void testDelete(){
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
bizUrlDAO.delete("www.easyjf.com");
assertNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
private BizUrlSynchronizeDO generateDO() {
BizUrlDO bizUrlDO = new BizUrlDO();
bizUrlDO.setUrl("www.easyjf.com");
bizUrlDO.setName("EasyJWeb");
bizUrlDO.setEmail("webmaster@easyjf.com");
return bizUrlDO;
}
public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) {
this.bizUrlDAO = bizUrlDAO;
}
}

getConfigLocations()鏂規(guī)硶涓?/span>AbstractDependencyInjectionSpringContextTests 鎻愪緵閰嶇疆錛?/span>Spring浼?xì)鏍规嵁璇ラ厤缃枃錃g鑷姩娉ㄥ叆bizUrlDAO灞炴с?/span>testInsert錛堬級(jí)鏂規(guī)硶鐢ㄤ簬嫻嬭瘯鎻掑叆鏂版暟鎹紝娉ㄦ剰榪欓噷鏈変釜闂錛屽鏋滄暟鎹簱涓凡緇忓瓨鍦ㄨURL鐨勮褰曪紝鍒欏簲鐢ㄤ細(xì)鎶ラ敊錛屾墍浠ヨ繖閲岃繕瑕佽繘琛屾暟鎹竻闄ゅ噯澶囧鐞嗭紝鎴戜滑縐頒箣涓?#8220;嫻嬭瘯鐜鍑嗗”錛屼互鍚庝細(xì)鐢ㄥ埌璇ュ悕璇嶏紱testDuplicateInsert錛堬級(jí)鏂規(guī)硶鐢ㄤ簬嫻嬭瘯鎻掑叆閲嶅鏁版嵁鐨勬儏鍐碉紝璇ユ柟娉曞悓鏍峰瓨鍦ㄤ笂闈㈢殑闂錛?/span>testDelete()鏂規(guī)硶鐢ㄤ簬嫻嬭瘯鍒犻櫎鏁版嵁鐨勬儏鍐碉紝榪欓噷灝界鍑嗗浜嗘暟鎹紝浣嗕粛娌℃湁鑰冭檻鏁版嵁搴撲腑宸茬粡鏈夎褰曠殑鎯呭喌銆?

 

    緇間笂鎵榪幫紝灝界璇ユ祴璇曠被宸茬粡姣旇緝娓呮櫚錛屼絾浠嶇劧瀛樺湪璁稿涓嶈凍涔嬪銆傛垜浠皢鍦ㄥ悗闈㈢殑绔犺妭榪涜璇︾粏鍒嗘瀽錛屽茍緇欏嚭瑙e喅鏂規(guī)銆?

 

Callback Function & Template Method  Pattern

 

       鍥炶皟鍑芥暟錛?/span>Callback Function錛夊拰妯℃澘鏂規(guī)硶錛?/span>Template Method錛夋槸杞歡鏋舵瀯璁捐涓渶甯哥敤鐨勪袱縐嶈璁℃ā寮忥紝榪欎袱縐嶈璁℃ā寮忓湪Spring妗嗘灦涓殢澶勫彲瑙併?/span>

 

       鍏充簬鏈妭鏄惁瑕佽緇嗕粙緇嶅洖璋冨嚱鏁幫紙Callback Function錛夊拰妯℃澘鏂規(guī)硶錛?/span>Template Method錛夋ā寮忕殑闂錛岀瑪鑰呰冭檻浜嗗緢闀挎椂闂淬傚洜涓虹綉緇滀笂瀵硅繖涓ょ鏅亶浣跨敤鐨勮璁℃ā寮忕殑瀹氫箟灞傚嚭涓嶇┓錛屽悇鏈夊悇鐨勯亾鐞嗭紝寰堥毦璇磋皝鏄皝闈炪傚喌涓旓紝閽堝涓嶅悓鐨勫簲鐢ㄥ満鏅紝榪欎袱縐嶆ā寮忎篃鏈夎澶氬彉浣擄紝鎴栬呰仈鍚堜嬌鐢ㄣ?/span>

 

鍥犳錛岀瑪鑰呮渶緇堝喅瀹氫笉鍦ㄦ澶勫榪欎袱縐嶆ā寮忓仛浠諱綍瀹氫箟鎴栧紩鐢紝璇瘋鑰呰嚜琛屽弬闃呯浉鍏蟲枃妗h祫鏂欍?/font>

 

鍥炶皟鍑芥暟鍜屾ā鏉挎柟娉曟ā寮忓湪鍗曞厓嫻嬭瘯涓殑搴旂敤

 

涓婁竴鑺傛垜浠畝鍗曠殑鍥為【浜嗗洖璋冨嚱鏁板拰妯℃澘鏂規(guī)硶妯″紡錛?/span>Spring妗嗘灦涓ぇ閲忛噰鐢ㄤ簡榪欎袱縐嶈璁℃ā寮忥紝鏈夊叴瓚g殑璇昏呭彲浠ラ槄璇?/span>Spring妗嗘灦浠g爜榪涗竴姝ュ琺鍥哄榪欎袱縐嶆ā寮忕殑鐞嗚В鍜岃繍鐢ㄣ傛湰鑺傚皢緇撳悎鍥炶皟鍑芥暟妯″紡鍜屾ā鏉挎柟娉曟ā寮忓鍓嶉潰鐨勬祴璇曠敤渚嬭繘琛岄噸鏋勶紝璇昏呭彲浠ュ湪閲嶆瀯榪囩▼涓愭浜嗚В榪欎袱縐嶈璁℃ā寮忕殑榪愮敤銆?/span>

 

棣栧厛錛岃鎴戜滑綆鍗曟葷粨涓涓嬪墠闈㈡祴璇曠敤渚嬬殑闂錛?/font>

 

涓銆?/font>             鎶借薄灞傛澶綆錛屼笉澶熼氱敤錛?/span>

渚嬪錛屽浜?/font>getConfigLocations錛堬級(jí)鏂規(guī)硶錛屾垜浠畬鍏ㄥ彲浠ユ斁鍒頒竴涓埗綾諱腑瀹炵幇錛屽洜涓哄浜庝竴涓」鐩岃█錛屽叾閰嶇疆鏂囦歡澶у閮芥槸緇熶竴鐨勶紝娌℃湁蹇呰鍦ㄦ病鏈夋祴璇曠被涓兘瀹氫箟璇ユ柟娉曘?/font>

/**
* DAL灞傛祴璇曟敮鎸佺被.
*
*
* 闄ら潪鐗規(guī)畩鎯呭喌,鎵鏈塂AO閮借緇ф壙姝ょ被.
*
* @author tao.youzt
*/
public abstract class GodzillaDalTestSupport extends AbstractDependencyInjectionSpringContextTests {
/*
* @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
*/
@Override
protected final String[] getConfigLocations() {
String[] configLocations = null;
String[] customConfigLocations = getCustomConfigLocations();
if (customConfigLocations != null && customConfigLocations.length > 0) {
configLocations = new String[customConfigLocations.length + 2];
configLocations[0] = "classpath:godzilla/dal/godzilla-db-test.xml";
configLocations[1] = "classpath:godzilla/dal/godzilla-dao.xml";
for (int i = 2; i < configLocations.length; i++) {
configLocations[i] = customConfigLocations[i - 2];
}
return configLocations;
} else {
return new String[] { "classpath:godzilla/dal/godzilla-db-test.xml",
"classpath:godzilla/dal/godzilla-dao.xml" };
}
}
/**
* 瀛愮被鍙互瑕嗙洊璇ユ柟娉曞姞杞戒釜鎬у寲閰嶇疆.
*
* @return
*/
protected String[] getCustomConfigLocations() {
return null;
}
}

濡傚浘鎵紺猴紝鎴戜滑鎻愮偧浜嗕竴涓娊璞℃敮鎸佺被錛屽疄鐜頒簡getConfigLocations錛堬級(jí)鏂規(guī)硶錛屽悓鏃惰繕鎻愪緵浜?/font>getCustomConfigLocations()鏂規(guī)硶渚涘瓙綾諱嬌鐢紝瀛愮被鍙互閫氳繃閲嶈澆璇ユ柟娉曟彁渚涘畾鍒剁殑閰嶇疆銆?/font>

 

 

鏈変簡璇ユ敮鎸佺被錛屽叿浣撴祴璇曠被鍙渶瑕佺戶鎵胯綾誨茍緙栧啓嫻嬭瘯閫昏緫鍗沖彲銆?/font>

浜屻?/font>             緙哄皯鍑嗗嫻嬭瘯鐜鍜屾竻闄ゆ祴璇曟暟鎹殑鐜妭錛?/span>

 

 

瀵? 浜庡ぇ澶氭暟嫻嬭瘯鐢ㄤ緥錛屽彲鑳介兘浼?xì)娑夊強(qiáng)鍒板垵濮嬪寲鏁版嵁鍜屾竻闄箣璇曟暟鎹殑闂锛屾渶鍏稿瀷鐨勫氨鏄暟鎹簱鎿嶄綔錛岃繖涔熸槸鏈枃閲囩敤鏁版嵁搴撴搷浣滀綔涓烘渚嬬殑鍘熷洜銆傞偅涔堝浣曞疄鐜板憿錛? 寰堟樉鐒跺湪姣忎釜嫻嬭瘯鏂規(guī)硶涓兘緙栧啓鍑嗗鐜鍜屾竻闄ゆ祴璇曟暟鎹殑浠g爜鏄笉鍚堥傜殑錛屽洜涓哄ぇ澶氭暟鏃跺欏浜庝竴涓祴璇曠被鑰岃█錛屽噯澶囩幆澧冨拰娓呴櫎鏁版嵁鐨勯昏緫閮芥槸涓鏍風(fēng)殑銆傝仾鏄庣殑 浣犱竴瀹氫細(xì)鎯沖埌瀹氫箟涓や釜鏂規(guī)硶錛屼竴涓垵濮嬪寲鐜錛屼竴涓竻闄ゆ祴璇曟暟鎹傛槸鐨勶紝灝辨槸榪欐牱錛?/font>

/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
protected void setupEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
protected void cleanEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
public void testTemp(){
setupEnv();
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
setupEnv();
}
}

濡備綘鎵瑙侊紝鎴戜滑鍦ㄨ繖閲屽畾涔変簡setupEnv()鍜?/span>cleanEnv()涓や釜鏂規(guī)硶錛屽垎鍒敤浜庡垵濮嬪寲鐜鍜屾竻闄ゆ祴璇曟暟鎹紝鐒跺悗鍦ㄦ祴璇曟柟娉曞紑濮嬪拰緇撴潫鏃跺垎鍒皟鐢ㄨ繖涓や釜鏂規(guī)硶銆傝繖鐨勭‘杈懼埌浜嗘垜浠殑鐩殑錛屼笉鐢ㄥ湪姣忎釜嫻嬭瘯鏂規(guī)硶涓兘緙栧啓鍒濆鍖栧拰娓呴櫎閫昏緫錛佷絾姝ゆ椂浣犱竴瀹氬彂鐜板湪姣忎釜嫻嬭瘯鏂規(guī)硶鍓嶅悗閮借皟鐢?/span>setupEnv()鍜?/span>cleanEnv()涔熷緢涓嶇埥錛岄偅璇存槑鎴戜滑鐨勬娊璞$▼搴﹁繕涓嶅錛侀偅涔堣濡備綍鍋氱殑鏇村ソ鍛紵

 

 

榪欓噷璇ュ埌妯℃澘鏂規(guī)硶錛?/span>Template Method錛夋ā寮忓彂鎸ュ▉鍔涚殑鏃跺欎簡銆傛垜浠皢浣跨敤妯℃澘鏂規(guī)硶鏉ョ戶緇噸鏋勫墠闈㈢殑妗堜緥銆傝鎴戜滑鍏堟潵瀹氫箟涓涓柟娉曪細(xì)

/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
protected void setupEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
protected void cleanEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
public void testTemp(){
//do test logic in this method
execute();
}
protected void execute(){
setupEnv();
doTestLogic();
setupEnv();
}
}

鐩告瘮涔嬪墠鐨勬柟娉曪紝鎴戜滑榪欓噷宸茬粡鏈変簡涓浜涜繘姝ワ紝瀹氫箟浜嗕竴涓?/span>execute鏂規(guī)硶錛屽湪璇ユ柟娉曞紑濮嬪拰緇撴潫鍒嗗埆鎵ц鍒濆鍖栧拰娓呴櫎閫昏緫錛岀劧鍚庣敱doTestLogic()鏂規(guī)硶瀹炵幇嫻嬭瘯閫昏緫銆傚疄闄呮祴璇曟柟娉曚腑鍙鎵цexecute鏂規(guī)硶錛屽茍浼犲叆嫻嬭瘯閫昏緫灝卞彲浠ヤ簡銆傜灖錛屼笉緇忔剰闂存垜浠凡緇忓疄鐜頒簡妯℃澘鏂規(guī)硶妯″紡鈥斺?strong>鎶婇氱敤鐨勯昏緫灝佽漿璧鋒潵錛屽彉鍖栫殑閮ㄥ垎鐢卞叿浣撴柟娉曟彁渚?/strong>銆傛庝箞錛屼笉鐩鎬俊涔堬紵鍛靛懙錛岃璁℃ā寮忓叾瀹炲茍涓嶅鏉傦紝灝辨槸鍓嶄漢瑙e喅閫氱敤闂鐨勪竴浜涙渶浣?jīng)_疄璺墊葷粨鑰屽凡銆?/span>

 

姝ゆ椂浣犲彲鑳戒細(xì)璇達(dá)紝TeseCase綾誨凡緇忔彁渚涗簡setUp()鍜?/span>tearDown()鏂規(guī)硶鏉ュ仛榪欎歡浜嬫儏錛屾垜涔熸兂鍒頒簡錛屽搱鍝堬紒浣嗚繖騫朵笉鍜屾湰鏂囦駭鐢熷啿紿侊紒

 

闂浼間箮瓚婃潵瓚婃竻鏅幫紝浣嗘垜浠伃閬囦簡涓鏉℃棤娉曡法瓚婄殑楦挎矡鈥斺?strong>濡備綍鎵嶈兘鎶婃祴璇曢昏緫浼犻掑埌
execute鏂規(guī)硶涓憿錛熷崟闈犱紶緇熺殑緙栫▼鏂規(guī)硶宸茬粡鏃犳硶瑙e喅榪欎釜闂錛屽洜姝ゆ垜浠繀欏誨鎵懼叾浠栭斿緞銆?/span> 

 

鍙兘姝ゆ椂姝ゅ埢浣犲凡緇忔兂鍒幫紝鏈枃鍙︿竴涓噸瑕佹蹇碘斺斿洖璋冩柟娉曟ā寮忚繕娌℃湁鐢ㄥ埌錛屾槸涓嶆槸璇ヤ嬌鐢ㄨ妯″紡浜嗭紵娌¢敊錛屽氨鏄畠浜嗭紒鎴戝厛鎶婁唬鐮佺粰鍑猴紝鐒跺悗鍐嶈緇嗚В閲娿?/font>

鎴戜滑鎻愪緵浜嗕竴涓娊璞$被TestExecutor錛屽茍瀹氫箟涓涓娊璞$殑execute鏂規(guī)硶錛岀劧鍚庝負(fù)嫻嬭瘯綾葷殑execute鏂規(guī)硶浼犲叆涓涓?/span>TestExecutor鐨勫疄渚嬶紝騫惰皟鐢ㄨ瀹炰緥鐨?/span>execute鏂規(guī)硶銆傛渶鍚庯紝鎴戜滑鐨勬祴璇曟柟娉曚腑鍙渶瑕?/span>new涓涓?/span>TestExecutor錛屽茍鍦?/span>execute鏂規(guī)硶涓疄鐜版祴璇曢昏緫錛屼究鍙互鎸夌収棰勬湡鐨勬柟寮忔墽琛岋細(xì)鍑嗗嫻嬭瘯鐜-鎵ц嫻嬭瘯閫昏緫-娓呴櫎嫻嬭瘯鏁版嵁銆傝繖渚挎槸涓涓吀鍨嬬殑鍥炶皟鏂規(guī)硶妯″紡鐨勫簲鐢紒

 

妯℃澘鏂規(guī)硶鍜屽洖璋冨嚱鏁版ā寮忚璧鋒潵鎸烘?zhèn)Q屽叾瀹炰篃灝辮繖涔堢畝鍗曪紝鏄庣櫧浜嗗惂錛氾級(jí)

涓夈?/font>             濡備綍涓烘瘡涓祴璇曟柟娉曞崟鐙彁渚涚幆澧冩柟娉曞憿錛?/span>  

 

閫氳繃鍓嶉潰鐨勮瑙o紝鐩鎬俊澶у瀵規(guī)ā鏉挎柟娉曞拰鍥炶皟鍑芥暟妯″紡閮藉凡緇忔帉鎻′簡錛岃繖閲岀洿鎺ョ粰鍑虹浉鍏充唬鐮侊細(xì)

/**
* DAL灞傛祴璇曟敮鎸佺被.
*
*
* 闄ら潪鐗規(guī)畩鎯呭喌,鎵鏈塂AO閮借緇ф壙姝ょ被.
*
* @author tao.youzt
*/
public abstract class GodzillaDalTestSupport extends AbstractDependencyInjectionSpringContextTests {
/*
* @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
*/
@Override
protected final String[] getConfigLocations() {
String[] configLocations = null;
String[] customConfigLocations = getCustomConfigLocations();
if (customConfigLocations != null && customConfigLocations.length > 0) {
configLocations = new String[customConfigLocations.length + 2];
configLocations[0] = "classpath:godzilla/dal/godzilla-db-test.xml";
configLocations[1] = "classpath:godzilla/dal/godzilla-dao.xml";
for (int i = 2; i < configLocations.length; i++) {
configLocations[i] = customConfigLocations[i - 2];
}
return configLocations;
} else {
return new String[] { "classpath:godzilla/dal/godzilla-db-test.xml",
"classpath:godzilla/dal/godzilla-dao.xml" };
}
}
/**
* 瀛愮被鍙互瑕嗙洊璇ユ柟娉曞姞杞戒釜鎬у寲閰嶇疆.
*
* @return
*/
protected String[] getCustomConfigLocations() {
return null;
}
/**
* 鍑嗗嫻嬭瘯鐜.
*/
protected void setupEnv() {
}
/**
* 娓呴櫎嫻嬭瘯鏁版嵁.
*/
protected void cleanEvn() {
}
/**
* 嫻嬭瘯鐢ㄤ緥鎵ц鍣?
*/
protected abstract class TestExecutor {
/**
* 鍑嗗嫻嬭瘯鐜
*/
public void setupEnv() {
}
/**
* 鎵ц嫻嬭瘯鐢ㄤ緥.
*/
public abstract void execute();
/**
* 娓呴櫎嫻嬭瘯鏁版嵁.
*/
public void cleanEnv() {
}
}
/**
* 鎵ц涓涓祴璇曠敤渚?
*
* @param executor
*/
protected final void execute(final TestExecutor executor) {
execute(IgnoralType.NONE, executor);
}
/**
* 鎵ц涓涓祴璇曠敤渚?
*
* @param executor
*/
protected final void execute(final IgnoralType ignoral, final TestExecutor executor) {
switch (ignoral) {
case NONE: {
setupEnv();
executor.setupEnv();
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case BOTH: {
executor.execute();
break;
}
case GLOBAL: {
executor.setupEnv();
executor.execute();
executor.cleanEnv();
break;
}
case LOCAL: {
setupEnv();
executor.execute();
cleanEvn();
break;
}
case GLOBAL_S: {
executor.setupEnv();
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case GLOBAL_C: {
setupEnv();
executor.setupEnv();
executor.execute();
executor.cleanEnv();
break;
}
case LOCAL_S: {
setupEnv();
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case LOCAL_C: {
setupEnv();
executor.setupEnv();
executor.execute();
cleanEvn();
break;
}
case BOTH_SETUP: {
executor.execute();
executor.cleanEnv();
cleanEvn();
break;
}
case BOTH_CLEAN: {
setupEnv();
executor.setupEnv();
executor.execute();
break;
}
case GLOBAL_S_LOCAL_C: {
executor.setupEnv();
executor.execute();
cleanEvn();
break;
}
case GLOBAL_C_LOCAL_S: {
setupEnv();
executor.execute();
executor.cleanEnv();
break;
}
}
}
/**
* 蹇界暐綾誨瀷Enum.
*/
public enum IgnoralType {
/** 涓嶅拷鐣ヤ換浣曠幆澧冪浉鍏蟲柟娉?*/
NONE,
/** 蹇界暐鍏ㄥ眬鐜鐩稿叧鏂規(guī)硶 */
GLOBAL,
/** 蹇界暐灞閮ㄧ幆澧冪浉鍏蟲柟娉?*/
LOCAL,
/** 蹇界暐鎵鏈夌幆澧冪浉鍏蟲柟娉?*/
BOTH,
/** 蹇界暐鍏ㄥ眬鍑嗗嫻嬭瘯鐜鏂規(guī)硶 */
GLOBAL_S,
/** 蹇界暐鍏ㄥ眬娓呴櫎嫻嬭瘯鏁版嵁鏂規(guī)硶 */
GLOBAL_C,
/** 蹇界暐灞閮ㄥ噯澶囨祴璇曠幆澧冩柟娉?*/
LOCAL_S,
/** 蹇界暐灞閮ㄦ竻闄ゆ祴璇曟暟鎹柟娉?*/
LOCAL_C,
/** 蹇界暐鍏ㄩ儴鍑嗗嫻嬭瘯鐜鏂規(guī)硶 */
BOTH_SETUP,
/** 蹇界暐鍏ㄩ儴娓呮嫻嬭瘯鏁版嵁鏂規(guī)硶 */
BOTH_CLEAN,
/** 蹇界暐鍏ㄥ眬鍑嗗嫻嬭瘯鐜鍜屽眬閮ㄦ竻闄ゆ祴璇曟暟鎹柟娉?*/
GLOBAL_S_LOCAL_C,
/** 蹇界暐鍏ㄥ眬娓呴櫎嫻嬭瘯鏁版嵁鍜屽眬閮ㄥ噯澶囨祴璇曠幆澧冩柟娉?*/
GLOBAL_C_LOCAL_S
}
}

 

/**
* URL DAO嫻嬭瘯綾?
*
* @author tao.youzt
*/
public class TestBizUrlDAO extends GodzillaDalTestSupport {
private BizUrlDAO bizUrlDAO;
@Override
protected void setupEnv() {
bizUrlDAO.delete("www.easyjf.com");
}
@Override
protected void cleanEvn() {
bizUrlDAO.delete("www.easyjf.com");
}
/**
* 嫻嬭瘯鎻掑叆涓鏉℃柊鏁版嵁.
*/
public void testInsert() {
execute(new TestExecutor() {
@Override
public void execute() {
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
});
}
/**
* 嫻嬭瘯閲嶅鎻掑叆鏁版嵁鐨勬儏鍐?
*/
public void testDuplicateInsert() {
execute(new TestExecutor() {
@Override
public void setupEnv() {
bizUrlDAO.insert(generateDO());
}
@Override
public void execute() {
try {
bizUrlDAO.insert(generateDO());
assertTrue("Must throw an exception!", false);
} catch (Exception e) {
assertTrue("Expect this exception.", true);
}
}
});
}
/**
* 嫻嬭瘯鍒犻櫎涓鏉″凡緇忓瓨鍦ㄧ殑鏁版嵁.
*/
public void testDelete() {
execute(IgnoralType.GLOBAL_C, new TestExecutor() {
@Override
public void execute() {
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
bizUrlDAO.delete("www.easyjf.com");
assertNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
@Override
public void setupEnv() {
bizUrlDAO.insert(generateDO());
}
});
}
/**
* 鐢熸垚涓涓敤浜庢祴璇曠殑DO.
*
* @return
*/
private BizUrlSynchronizeDO generateDO() {
BizUrlDO bizUrlDO = new BizUrlDO();
bizUrlDO.setUrl("www.easyjf.com");
bizUrlDO.setName("EasyJWeb");
bizUrlDO.setEmail("webmaster@easyjf.com");
return bizUrlDO;
}
public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) {
this.bizUrlDAO = bizUrlDAO;
}
}

              娉ㄦ剰testDeleate()鏂規(guī)硶錛屾垜浠紶鍏ヤ簡涓や釜鍙傛暟錛岀涓涓弬鏁?/span>IgnoralType.GLOBAL_C 浠h〃蹇界暐鍝釜鏂規(guī)硶錛屾湁12縐嶇被鍨嬪彲浠ヨ緗?/span>GLOBAL_C浠h〃蹇界暐鍏ㄥ眬鐨勬竻闄ゆ祴璇曟暟鎹柟娉曪紝鍏朵粬瑙佷唬鐮佹敞閲娿?/span>








瑗跨摐 2010-09-29 13:25 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 国产成人在线免费观看| 久久经典免费视频| 国产av无码专区亚洲av果冻传媒| 精品国产_亚洲人成在线| 永久久久免费浮力影院| 亚洲AV无码一区二区三区性色| 国内外成人免费视频| 白白色免费在线视频| 无码国产亚洲日韩国精品视频一区二区三区 | 久久久无码精品亚洲日韩蜜桃| a级在线免费观看| 亚洲国产精品人久久| 91精品国产免费久久国语蜜臀| 亚洲精品无码久久久久久久 | 亚洲国产精品无码久久久秋霞2| 两性色午夜免费视频| 亚洲va无码专区国产乱码| 最近2019年免费中文字幕高清| 亚洲人成网站18禁止久久影院| 久久午夜免费视频| 免费无毒a网站在线观看| 超清首页国产亚洲丝袜| 99视频免费观看| 99亚洲精品卡2卡三卡4卡2卡| 精品国产人成亚洲区| 久久aⅴ免费观看| 中文字幕无码精品亚洲资源网久久| 国产免费人成视频在线观看| 十八禁在线观看视频播放免费| 日韩亚洲Av人人夜夜澡人人爽| 最近中文字幕无吗免费高清| 未满十八私人高清免费影院| 97久久精品亚洲中文字幕无码| 免费无码看av的网站| 精品97国产免费人成视频| 亚洲综合图片小说区热久久| 四虎永久免费影院| 97免费人妻在线视频| 美女啪啪网站又黄又免费| 久久久久久亚洲Av无码精品专口| 波多野结衣久久高清免费 |