锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎴戜滑鍦╳eb.xml涓殑webapp涔嬮棿鍔犲叆:
<servlet>
<servlet-name>ServletRedirector</servlet-name>
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>value1 used for testing</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>ServletTestRunner</servlet-name>
<servlet-class>org.apache.cactus.server.runner.ServletTestRunner</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletRedirector</servlet-name>
<url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletTestRunner</servlet-name>
<url-pattern>/ServletTestRunner</url-pattern>
</servlet-mapping>
鐒跺悗鎴戜滑鍐欎竴涓畝鍗曠殑Servlet鏉ヨ繘琛屾祴璇?
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
public class SampleServlet extends HttpServlet
{
public void saveToSession(HttpServletRequest request)
{
String testparam = request.getParameter("testparam");
request.getSession().setAttribute("testAttribute", testparam);
}
}
瀵逛簬姝ervlet鍦▁ml鐨勯厤緗垜灝變笉鍐欎簡錛庢兂蹇呬綘涔熶簡鐒朵簬蹇冧簡鍚э紟
鏉ョ湅鐪嬫垜浠殑嫻嬭瘯綾?
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
public class TestSampleServlet extends ServletTestCase
{
public TestSampleServlet(String theName)
{
super(theName);
}
public static Test suite()
{
return new TestSuite(TestSampleServlet.class);
}
public void beginSaveToSessionOK(WebRequest webRequest)
{
webRequest.addParameter("testparam", "it works!");
}
public void testSaveToSessionOK()
{
SampleServlet servlet = new SampleServlet();
servlet.saveToSession(request);
assertEquals("it works!", session.getAttribute("testAttribute"));
}
}
閮ㄧ講涔嬪悗錛屽惎鍔═omcat,璁塊棶:http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet
榪欐椂鍊欎綘浼氱湅鍒拌緭鍑恒錛?br />
<?xml version="1.0" encoding="UTF-8" ?>
- <testsuites>
- <testsuite name="com.test.servlet.TestServletTest" tests="1" failures="0" errors="1" time="0.516">
- <testcase name="testSaveSessionToOK" time="0.36">
<error message="org/apache/commons/codec/DecoderException" type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException at org.apache.commons.httpclient.HttpMethodBase.getURI(HttpMethodBase.java:265) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:383) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody0(HttpClientConnectionHelper.java:144) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody1$advice(HttpClientConnectionHelper.java:307) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect(HttpClientConnectionHelper.java:1) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callRunTest(DefaultHttpClient.java:163) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:81) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:307) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java:1) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:164) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:83) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:307) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java:1) at org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:145) at org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:218) at org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:134) at org.apache.cactus.server.runner.ServletTestRunner.run(ServletTestRunner.java:309) at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody0(ServletTestRunner.java:187) at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody1$advice(ServletTestRunner.java:225) at org.apache.cactus.server.runner.ServletTestRunner.doGet(ServletTestRunner.java:1) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)</error>
</testcase>
</testsuite>
</testsuites>
鐪嬫潵紼嬪簭娌℃湁澶ч棶棰橈紝宸茬粡姝g‘鎵ц錛庝笉榪囪繖鏃舵彁紺烘湁涓涓被鎵句笉鍒幫紟
瀵逛簬榪欎釜闂鎴戜滑鍙互鍘?font style="background-color: #f4f4f4">http://commons.apache.org/downloads/download_codec.cgi涓嬭澆錛?br />
榪欎釜xml鐪嬭搗鏉ュ灝戜笉涔犳儻錛庢垜浠彲浠ヤ笅杞絰sl鎶婂畠杞崲鎴恏tml鏍煎紡錛?br />
鐐規涓嬭澆 鎶婂畠鏀懼埌浣爓eb搴旂敤鐨勬牴鐩綍涓嬶紟
榪欎釜鏃跺欎綘鍙互璁塊棶濡備笅鍦板潃錛?br />
http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet&xsl=cactus-report.xsl
榪欐椂鍊欎綘灝變細鐪嬪埌鍙嬪ソ鐨凥tml鏍煎紡浜?
]]>
鐒跺悗紜繚浣犵殑jdk鐗堟湰鍦?.5浠ヤ笂.
絎竴姝?
鎵懼埌浣犱笅杞界殑selenium瑙e帇鐩綍涓嬬殑selenium-server-0.9.2鐩綍.
鍦ㄨ繖涓洰褰曚笅鍐欎釜鎵瑰鐞?鍐呭涓?
java -jar selenium-server.jar
蹇呴』鍏堝惎鍔ㄨ繖涓?鍚姩鍚庣殑dos紿楀彛涓嶈鍏抽棴.
絎簩姝?
鍦∕yEclipse寤轟釜web宸ョ▼,鎶妔elenium-java-client-driver-0.9.2鐩綍涓嬬殑jar鍖呭姞鍏?br />
鍒皐eb宸ョ▼鐨刲ib鐩綍涓?鍔犲叆junit4鏀寔.
絎笁姝?
鍐欎釜嫻嬭瘯index.jsp欏?
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<html>
<head>
<title>test!</title>
</head>
<body>
<form action="success.jsp" method="post">
UserName:<input type="text" name="username" /><br />
<select name="select">
<option value="game">娓告垙</option>
<option value="program">緙栫▼</option>
</select> <br/>
<input type="submit" name="sub" value="submit"/> <br />
</form>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>success</title>
</head>
<body>
ok!
</body>
</html>
鍐欎釜嫻嬭瘯綾?
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.server.SeleniumServer;
import static org.junit.Assert.*;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
public class TestPage
{
private Selenium selenium;
@Before
public void setUp()
{
//姝rl蹇呴』鏄疭elenium鏈嶅姟鍣ㄥ湴鍧
String url = "http://localhost:4444";
selenium = new DefaultSelenium("localhost",SeleniumServer.getDefaultPort(),"*iexplore",url);
selenium.start();
}
@After
public void tearDown()
{
try
{
selenium.stop();
} catch (RuntimeException e)
{
System.out.println(e.getMessage());
}
}
//嫻嬭瘯鏍囬,鏂囨湰妗嗚緭鍏?鍙婃寜閽偣鍑?/span>
@Test
public void test1()
{
//鎴戣繖閲屾槸tomcat鐨勫湴鍧,鎴戠殑tomcat绔彛鏄?888,selenium鏄綋鍓嶅伐紼?鎴戣瀹冩墦寮棣栭〉
selenium.open("http://localhost:8888/selenium/index.jsp");
String title = selenium.getTitle();
//鍘熸潵緗戦〉鐨勬爣棰?/span>
System.out.println(title);
selenium.type("xpath=//input[@name='username']", "zdw");
//寰楀埌杈撳叆鐨勬枃鏈鐨勫?/span>
System.out.println("textvalue:" + selenium.getValue("xpath=//input[@name='username']"));
selenium.click("xpath=//input[@name='sub']");
selenium.waitForPageToLoad("4000");
assertEquals(title, "test!");
//杈撳嚭鏂伴〉鐨勬爣棰?/span>
System.out.println(selenium.getTitle());
}
//嫻嬭瘯閫夋嫨妗?/span>
@Test
public void testSelect()
{
selenium.open("http://localhost:8888/selenium/index.jsp");
selenium.select("xpath=//select[@name='select']", "index=1");
//寰楀埌閫夋嫨鐨刬d
System.out.println("selectid:" + selenium.getSelectedIndex("xpath=//select[@name='select']"));
//寰楀埌閫夋嫨鐨勫?/span>
System.out.println("selectvalue:" + selenium.getSelectedValue("xpath=//select[@name='select']"));
selenium.click("xpath=//input[@type='submit']");
selenium.waitForPageToLoad("3000");
}
}
婧愮爜鍙湪鎴戠殑緗戠洏涓嬭澆.
]]>
鎶婁竴浜涗嬌鐢ㄥ績寰楀垎浜粰澶у錛屽笇鏈涘ぇ瀹惰兘澶氬浣跨敤榪欐牱鐨勫己澶х殑錛屽厤璐圭殑宸ュ叿錛屾潵淇濊瘉鎴戜滑鐨勮川閲忋?/span>
Selenium 鐨勬枃妗g幇瀛樼殑涓嶅皯錛屼笉榪囬兘澶畝鍗曚簡銆備嬌鐢⊿elenium鐨勬椂鍊欙紝鎴戞洿澶氱殑鏄洿鎺ュ幓鐪婣PI鏂囨。錛屽ソ鍦ˋPI涓嶉敊錛?/span>
涓涓竴涓湅錛屽氨鑳芥壘鍒版墍闇瑕佺殑 :-) 瀹樻柟緗戠珯錛?/span>http://www.openqa.org/selenium/
濂斤紝涓嬮潰榪涘叆姝i錛?/span>
涓銆丼elenium 鐨勭増鏈?/span>
Selenium 鐜板湪瀛樺湪2涓増鏈紝涓涓彨 selenium-core, 涓涓彨selenium-rc 銆?/span>
selenium-core 鏄嬌鐢℉TML鐨勬柟寮忔潵緙栧啓嫻嬭瘯鑴氭湰錛屼綘涔熷彲浠ヤ嬌鐢?Selenium-IDE鏉ュ綍鍒惰剼鏈紝浣嗘槸鐩墠Selenium-IDE
鍙湁 FireFox 鐗堟湰銆?/span>
Selenium-RC 鏄?selenium-remote control 緙╁啓錛屾槸浣跨敤鍏蜂綋鐨勮璦鏉ョ紪鍐欐祴璇曠被銆?/span>
selenium-rc 鏀寔鐨勮璦闈炲父澶氾紝榪欓噷鎴戜滑鐫閲嶅叧娉╦ava鐨勬柟寮忋傝繖閲岃鐨勪篃涓昏鏄?selenium-rc錛屽洜涓轟釜浜鴻繕鏄枩嬈㈣繖縐?br /> 鏂瑰紡 :-)
浜屻佷竴浜涘噯澶囧伐浣?/span>
1銆佸綋鐒舵槸涓嬭澆 selenium 浜嗭紝鍒?http://www.openqa.org/selenium/ 涓嬭澆灝卞彲浠ヤ簡錛岃寰楅夋嫨selenium-rc 鐨勭増鏈?/span>
2銆佸涔犱竴涓?xpath 鐨勭煡璇嗐傛湁涓暀紼嬶細http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
涓瀹氳瀛︿範榪欎釜錛屼笉鐒朵綘鏍規湰鐪嬩笉鎳備笅闈㈢殑鍐呭錛?/span>
3銆佸畨瑁?jdk1.5
涓夈乻elenium-rc 涓浜涗嬌鐢ㄦ柟娉?/span>
鍦?selenium-remote-control-0.9.0\server 鐩綍閲岋紝鎴戜滑榪愯 java -jar selenium-server.jar
涔嬪悗浣犲氨浼氱湅鍒頒竴浜涘惎鍔ㄤ俊鎭傝浣跨敤 selenium-rc 錛屽惎鍔ㄨ繖涓猻erver 鏄繀欏葷殑銆?/span>
褰撶劧錛屽惎鍔ㄧ殑鏃跺欐湁璁稿鍙傛暟錛岃繖浜涚敤娉曞彲浠ュ湪緗戠珯閲岀湅鐪嬫暀紼嬶紝涓嶈繃涓嶅姞鍙傛暟涔熷凡緇忚凍澶熶簡銆?/span>
selenium server 鍚姩瀹屾瘯浜嗭紝閭d箞鎴戜滑灝卞彲浠ュ紑濮嬬紪鍐欐祴璇曠被浜嗭紒
鎴戜滑鍏堟湁涓蹇碉紝selenium 鏄ā浠挎祻瑙堝櫒鐨勮涓虹殑錛屽綋浣犺繍琛屾祴璇曠被鐨勬椂鍊欙紝浣犲氨浼氬彂鐜皊elenium 浼氭墦寮涓涓?/span>
嫻忚鍣紝鐒跺悗嫻忚鍣ㄦ墽琛屼綘鐨勬搷浣溿?/span>
濂藉惂錛岄鍏堢敓鎴愭垜浠殑嫻嬭瘯綾伙細
java 浠g爜
浠g爜鍗佸垎綆鍗曪紝浣滅敤灝辨槸鍒濆鍖栦竴涓?Selenium 瀵硅薄銆傚叾涓細
url : 灝辨槸浣犺嫻嬭瘯鐨勭綉绔?br />
localhost: 鍙互涓嶆槸localhost錛屼絾鏄繀欏繪槸 selenium server 鍚姩鐨勫湴鍧
*iexplore : 鍙互鏄叾瀹冩祻瑙堝櫒綾誨瀷錛屽彲浠ュ湪緗戠珯涓婄湅閮芥敮鎸佸摢浜涖?/span>
涓嬮潰鎴戝氨瑕佽璁叉庝箞浣跨敤selenium 榪欎釜瀵硅薄鏉ヨ繘琛屾祴璇曘?/span>
1銆佹祴璇曟枃鏈緭鍏ユ
鍋囪欏甸潰涓婃湁涓涓枃鏈緭鍏ユ錛屾垜浠嫻嬭瘯鐨勫唴瀹規槸 鍦ㄥ叾涓緭鍏ヤ竴浜涘唴瀹癸紝鐒跺悗鐐瑰嚮涓涓寜閽紝鐪嬬湅欏甸潰鐨勬槸鍚﹁煩杞?br /> 鍒伴渶瑕佺殑欏甸潰銆?br />
涓婇潰鐨勪唬鐮佹槸榪欎釜鎰忔濓細
1銆佽皟鐢?selenium.open 鏂規硶錛屾祻瑙堝櫒浼氭墦寮鐩稿簲鐨勯〉闈?br />
2銆佷嬌鐢?type 鏂規硶鏉ョ粰杈撳叆妗嗚緭鍏ユ枃瀛?br />
3銆佺瓑寰呴〉闈㈣澆鍏?br />
4銆佺湅鐪嬫柊鐨勯〉闈㈡爣棰樻槸涓嶆槸鎴戜滑鎯寵鐨勩?/span>
2銆佹祴璇曚笅鎷夋
java 浠g爜鍙互鐪嬪埌錛屾垜浠彲浠ヤ嬌鐢?select 鏂規硶鏉ョ‘瀹氶夋嫨涓嬫媺妗嗕腑鐨勫摢涓夐」銆?br /> select 鏂規硶榪樻湁寰堝鐢ㄦ硶錛屽叿浣撳幓鐪嬬湅鏂囨。鍚с?/span>
3銆佹祴璇昪heck box
java 浠g爜
鎴戜滑鍙互浣跨敤 check 鏂規硶鏉ョ‘瀹氶夋嫨鍝釜radio button
4銆佸緱鍒版枃鏈閲岀殑鏂囧瓧
java 浠g爜
getValue 鏂規硶灝辨槸寰楀埌鏂囨湰妗嗛噷鐨勬暟鍊鹼紝鍙笉鏄?getText 鏂規硶錛岀敤閿欎簡鍙氨閮侀椃浜嗐?/span>
5銆佸垽鏂〉闈㈡槸鍚﹀瓨鍦ㄤ竴涓厓绱?/span>
java 浠g爜
涓鑸繖涓槸鐢ㄦ潵嫻嬭瘯褰撳垹闄や竴浜涙暟鎹悗錛岄〉闈笂鏈変簺涓滆タ灝變笉浼氭樉紺虹殑鎯呭喌銆?/span>
6銆佸垽鏂笅鎷夋閲岄夋嫨浜嗗摢涓夐」
java 浠g爜
榪欎釜鍙互鐢ㄦ潵鍒ゆ柇涓嬫媺妗嗘樉紺虹殑閫夐」鏄惁鏄湡鏈涚殑閫夐」銆?/span>
7銆佸鏋滄湁 alert 寮瑰嚭瀵硅瘽妗嗘庝箞鍔烇紵
榪欎釜闂寮勪簡鎸洪暱鏃墮棿錛屽彲浠ヨ繖鏍鋒潵鍏抽棴寮瑰嚭鐨勫璺ㄦ錛?/span>
java 浠g爜鍏跺疄褰撹皟鐢?selenium.getAlert() 鏃訛紝灝變細鍏抽棴 alert 寮瑰嚭鐨勫璇濇銆?br /> 涔熷彲浠ヤ嬌鐢?System.out.println(selenium.getAlert()) 鏉ユ煡鐪嬪璺ㄦ鏄劇ず鐨勪俊鎭?/span>
鍦ㄦ祴璇曠殑鏃跺欙紝鏈夌殑浜轟細鏄劇ず璁稿alert 鏉ユ煡鐪嬭繍琛屾椂鐨勬暟鎹紝閭d箞鎴戜滑鍙互鐢ㄤ笅闈㈢殑鏂瑰紡鏉ュ叧闂偅浜?alert:
java 浠g爜8銆佸浣曟祴璇曚竴浜涢敊璇秷鎭殑鏄劇ず錛?/span>
java 浠g爜鍒囪錛?getBodyText 榪斿洖鐨勬椂嫻忚鍣ㄩ〉闈笂鐨勬枃瀛楋紝涓嶅洖鍖呭惈html 浠g爜鐨勶紝濡傛灉瑕佹樉紺篽tml 浠g爜錛岀敤涓嬮潰榪欎釜:
java 浠g爜浠ヤ笂灝辨槸鏈甯哥敤鐨勫嚑涓柟娉曚簡錛屼緥濡?click, type, getValue 絳夌瓑銆?br /> 榪樻湁灝辨槸涓瀹氳瀛︿範 xpath, 鍏跺疄xpath 涔熷彲浠ユ湁“涓庛佹垨銆侀潪”鐨勬搷浣滐細
java 浠g爜鍥涖佸叾浠?/span>
selenium 榪樻湁鏇村鐨勭敤娉曪紝渚嬪寮瑰嚭欏甸潰絳夌瓑銆傚綋闈㈠娌¤榪囩殑嫻嬭瘯瑕佹眰鏃訛紝鎴戞渶絎ㄧ殑鏂規硶灝辨槸鎸夌収api鏂囨。涓涓竴涓壘錛?br /> 濂藉湪涓嶅錛岃偗瀹氳兘鎵懼埌銆?br />
Student:
闆嗗悎嫻嬭瘯鐨勭被:PersonSuite
package calc; public class Calculator { 銆private static int result; //瀛樺偍緇撴灉鐨勯潤鎬佸彉閲?br /> 銆public void add(int n) { 銆銆result = result + n; 銆} 銆public void substract(int n) { 銆銆result = result - 1; //閿欒錛氬簲璇ユ槸"result = result - n" 銆} 銆public void multiply(int n) {} //榪樻病瀹炵幇 銆public void divide(int n) { 銆銆result = result / n; 銆} 銆public void square(int n) { 銆銆result = n * n; 銆} 銆public void squareRoot(int n) { 銆銆for (; ;) ; //閿欒錛氭棤闄愬驚鐜?br /> 銆} 銆public void clear() { //娓呴櫎緇撴灉 銆銆result = 0; 銆} 銆public void switchOn() { //鎵撳紑灞忓箷錛屾樉紺?hello"錛屽茍鎶ヨ 銆銆result = 0; //瀹炵幇鍏跺畠鐨勮綆楀櫒鍔熻兘 銆} 銆public void switchOff() { } //鏄劇ず"bye bye"錛屾姤璀︼紝騫跺叧闂睆騫?br /> 銆public int getResult() { 銆銆return result; 銆} } |
package junit3; import calc.Calculator; import junit.framework.TestCase; public class CalculatorTest extends TestCase { 銆private static Calculator calculator = new Calculator(); 銆@Override protected void setUp() { calculator.clear(); } 銆public void testAdd() { 銆銆calculator.add(1); 銆銆calculator.add(1); 銆銆assertEquals(calculator.getResult()錛?2); 銆} 銆public void testSubtract() { 銆銆calculator.add(10); 銆銆calculator.subtract(2); 銆銆assertEquals(calculator.getResult()錛?8); 銆} 銆public void testDivide() { 銆銆calculator.add(8); 銆銆calculator.divide(2); 銆銆assert calculator.getResult() == 5; 銆} 銆public void testDivideByZero() { 銆銆try { 銆銆銆calculator.divide(0); 銆銆銆fail(); 銆銆} 銆銆catch (ArithmeticException e) { } 銆} 銆public void notReadyYetTestMultiply() { 銆銆calculator.add(10); 銆銆calculator.multiply(10); 銆銆assertEquals(calculator.getResult()錛?100); 銆} } |
package JUnit 4; import calc.Calculator; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.*; public class CalculatorTest { 銆private static Calculator calculator = new Calculator(); 銆@Before public void clearCalculator() { 銆銆calculator.clear(); 銆} 銆@Test public void add() { 銆銆calculator.add(1); 銆銆calculator.add(1); 銆銆assertEquals(calculator.getResult()錛?2); 銆} 銆@Test public void subtract() { 銆銆calculator.add(10); 銆銆calculator.subtract(2); 銆銆assertEquals(calculator.getResult()錛?8); 銆} 銆@Test public void divide() { 銆銆calculator.add(8); 銆銆calculator.divide(2); 銆銆assert calculator.getResult() == 5; 銆} 銆@Test(expected = ArithmeticException.class) 銆public void divideByZero() { 銆銆calculator.divide(0); 銆} 銆@Ignore("not ready yet") 銆@Test 銆public void multiply() { 銆銆calculator.add(10); 銆銆calculator.multiply(10); 銆銆assertEquals(calculator.getResult()錛?100); 銆} } |
public static void assertEquals(String message錛?Object[] expecteds錛?Object[] actuals); public static void assertEquals(Object[] expecteds錛?Object[] actuals); |
..F.E. There was 1 error: 1) testDivide(junit3.CalculatorTest)java.lang.AssertionError at junit3.CalculatorTest.testDivide(CalculatorTest.java:33) There was 1 failure: 1) testSubtract(junit3.CalculatorTest)junit.framework.AssertionFailedError: expected:錛?錛?but was:錛?錛?br /> at junit3.CalculatorTest.testSubtract(CalculatorTest.java:27) FAILURES!!! Tests run: 4錛?Failures: 1錛?Errors: 1 |
java -ea org.junit.runner.JUnitCore junit3.CalculatorTest JUnit version 4.1 ..E.E. There were 2 failures: 1) testSubtract(junit3.CalculatorTest) junit.framework.AssertionFailedError: expected:錛?錛?but was:錛?錛?br /> at junit.framework.Assert.fail(Assert.java:47) 2) testDivide(junit3.CalculatorTest) java.lang.AssertionError at junit3.CalculatorTest.testDivide(CalculatorTest.java:33) FAILURES!!! Tests run: 4錛?Failures: 2 *** java -ea org.junit.runner.JUnitCore JUnit 4.CalculatorTest JUnit version 4.1 ...E.EI There were 2 failures: 1) subtract(JUnit 4.CalculatorTest) java.lang.AssertionError: expected:錛?錛?but was:錛?錛?br /> at org.junit.Assert.fail(Assert.java:69) 2) divide(JUnit 4.CalculatorTest) java.lang.AssertionError at JUnit 4.CalculatorTest.divide(CalculatorTest.java:40) FAILURES!!! Tests run: 4錛?Failures: 2 |
@BeforeClass鍜孈AfterClass | @Before鍜孈After |
鍦ㄦ瘡涓被涓彧鏈変竴涓柟娉曡兘琚敞瑙c? | 澶氫釜鏂規硶鑳借娉ㄨВ錛屼絾鍏舵墽琛岀殑欏哄簭鏈壒鍒寚瀹氾紝涓斾笉榪愯閲嶈澆鏂規硶銆? |
鏂規硶鍚嶆槸涓嶇浉鍏崇殑 | 鏂規硶鍚嶆槸涓嶇浉鍏崇殑 |
姣忎釜綾昏繍琛屼竴嬈? | 鍦ㄦ瘡涓祴璇曟柟娉曡繍琛屽墠鎴栬繍琛屽悗榪愯 |
鍦ㄥ綋鍓嶇被鐨凘BeforeClass鏂規硶榪愯鍓嶅厛榪愯瓚呯被鐨凘BeforeClass鏂規硶銆傚湪瓚呯被涓0鏄庣殑@AfterClass鏂規硶灝嗗湪鎵鏈夊綋鍓嶇被鐨勮鏂規硶榪愯鍚庢墠榪愯銆? | 瓚呯被涓殑@Before鍦ㄦ墍鏈夊瓙綾葷殑璇ユ柟娉曡繍琛屽墠榪愯銆傚湪瓚呯被涓殑@After鍦ㄥ湪鎵鏈夊瓙綾葷殑璇ユ柟娉曡繍琛屽悗鎵嶈繍琛屻? |
蹇呴』鏄叕鍏卞拰闈為潤鎬佺殑銆? | 蹇呴』鏄叕鍏卞拰闈為潤鎬佺殑銆? |
鍗充嬌涓涓狜BeforeClass鏂規硶鎶涘嚭涓涓紓甯革紝鎵鏈夌殑@AfterClass鏂規硶涔熶繚璇佽榪愯銆? | 鍗充嬌涓涓狜Before鎴栬匑Test鏂規硶鎶涘嚭涓涓紓甯革紝鎵鏈夌殑@After鏂規硶涔熶繚璇佽榪愯銆?/td> |
Start test system //鐖剁被鐨凘BeforeClass Switch on calculator //瀛愮被鐨凘BeforeClass Initialize test system //絎竴涓祴璇?br /> Clear calculator Initialize test system //絎簩涓祴璇?br /> Clear calculator Clean test system Initialize test system //絎笁涓祴璇?br /> Clear calculator Clean test system Initialize test system //絎洓涓祴璇?br /> Clear calculator Clean test system Switch off calculator //瀛愮被鐨凘AfterClass Stop test system //鐖剁被鐨凘AfterClass |
There was 1 failure: 1) squareRoot(JUnit 4.AdvancedTest) java.lang.Exception: test timed out after 1000 milliseconds at org.junit.internal.runners.TestMethodRunner.runWithTimeout(TestMethodRunner.java:68) at org.junit.internal.runners.TestMethodRunner.榪愯(TestMethodRunner.java:43) FAILURES!!! Tests run: 4錛?Failures: 1 |
java org.junit.runner.JUnitCore JUnit 4.SquareTest JUnit version 4.1 .......E There was 1 failure: 1) square[6](JUnit 4.SquareTest) java.lang.AssertionError: expected:錛?8錛?but was:錛?9錛?br /> at org.junit.Assert.fail(Assert.java:69) FAILURES!!! Tests run: 7錛?Failures: 1 |
package JUnit 4; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ CalculatorTest.class錛?br /> SquareTest.class }) public class AllCalculatorTests {} |
java -ea org.junit.runner.JUnitCore JUnit 4.AllCalculatorTests JUnit version 4.1 ...E.EI.......E There were 3 failures: 1) subtract(JUnit 4.CalculatorTest) java.lang.AssertionError: expected:錛?錛?but was:錛?錛?br /> at org.junit.Assert.fail(Assert.java:69) 2) divide(JUnit 4.CalculatorTest) java.lang.AssertionError at JUnit 4.CalculatorTest.divide(CalculatorTest.java:40) 3) square[6](JUnit 4.SquareTest) java.lang.AssertionError: expected:錛?8錛?but was:錛?9錛?br /> at org.junit.Assert.fail(Assert.java:69) FAILURES!!! Tests run: 11錛?Failures: 3 |
import org.junit.internal.runners.TestClassRunner; import org.junit.runner.RunWith; @RunWith(TestClassRunner.class) public class CalculatorTest { ... } |
public static junit.framework.Test suite() { 銆return new JUnit 4TestAdapter(CalculatorTest.class); } |
![]() 鍥?.IDEADemetra浠呰兘榪愯CalculatorTest銆?br /> ![]() 鍥?.Eclipse 3.2RC7鑳藉榪愯嫻嬭瘯闆嗙被AllCalculatorTests銆?/div> |
錛?-- Test --錛?br /> 錛渢arget name="test" depends="compile"錛?br /> 錛渏unit fork="yes" haltonfailure="yes"錛?br /> 錛渢est name=" JUnit 4.AllCalculatorTests"/錛?br /> 錛渇ormatter type="plain" usefile="false"/錛?br /> 錛渃lasspath refid="classpath"/錛?br /> 錛?junit錛?br /> 錛?target錛?/td> |
()鑰屽湪JUnit4.x涓笉蹇呯戶鎵縏estCase,閲囩敤浜嗘敞瑙g殑鏂瑰紡.鍙鍦ㄦ祴璇曠殑鏂規硶涓婂姞涓婃敞瑙?/span>
@Test,鍗沖彲.鍦↗Unit4.x涓鏋滅戶鎵夸簡TestCase,鑰屾敞瑙e氨涓嶈搗浣滅敤浜?騫朵笖鏈夊緢閲嶈鐨勪竴鐐?/span>
灝辨槸鍦↗Unit4.x涓戶鎵夸簡TestCase鍚?鍦∣utLine瑙嗗浘涓祴璇曞崟涓柟娉曟椂,緇撴灉鏁翠釜綾婚兘run
浜? 榪樻湁涓鐐瑰氨鏄?鍦?.x涓渶瑕佸疄鐜皊etUp鍜宼earDown鏂規硶,鑰屽湪4.x涓棤闇榪欐牱,鍙互鑷畾涔?/span>
闇瑕佸湪嫻嬭瘯鍓嶅拰嫻嬭瘯鍚庣殑鏂規硶,鍦ㄦ柟娉曞墠鍔犱笂Annotation@before,@after灝卞彲浠ヤ簡.
瀵規,鍦↗Unit4.x涓嶅繀緇ф壙TestCase鐢ㄦ敞瑙e嵆鍙鍗曚釜鏂規硶榪涜嫻嬭瘯.榪欎釜闂閮侀椃浜?br />
鎴戝崐澶?瑙e喅浜?鐪熼珮鍏?