娉ㄦ剰錛?/strong>璇ユ鏋剁殑鏀硅繘鏄浉褰撳墠娌跨殑銆傚敖綆?JUnit 4 鐨勫ぇ杞粨寰堟竻鏅幫紝浣嗘槸鍏剁粏鑺備粛鐒跺彲浠ユ敼鍙樸傝繖鎰忓懗鐫鏈枃鏄 JUnit 4 鎶㈠厛鐪嬶紝鑰屼笉鏄畠鐨勬渶緇堟晥鏋溿?/p>
嫻嬭瘯鏂規硶
浠ュ墠鎵鏈夌増鏈殑 JUnit 閮戒嬌鐢ㄥ懡鍚嶇害瀹氬拰鍙嶅皠鏉ュ畾浣嶆祴璇曘備緥濡傦紝涓嬮潰鐨勪唬鐮佹祴璇?1+1 絳変簬 2錛?/p>
import junit.framework.TestCase;
public class AdditionTest extends TestCase {
private int x = 1;
private int y = 1;
public void testAddition() {
int z = x + y;
assertEquals(2, z);
}
}
|
鑰屽湪 JUnit 4 涓紝嫻嬭瘯鏄敱 @Test
娉ㄩ噴鏉ヨ瘑鍒殑錛屽涓嬫墍紺猴細
import org.junit.Test;
import junit.framework.TestCase;
public class AdditionTest extends TestCase {
private int x = 1;
private int y = 1;
@Test public void testAddition() {
int z = x + y;
assertEquals(2, z);
}
}
|
浣跨敤娉ㄩ噴鐨勪紭鐐規槸涓嶅啀闇瑕佸皢鎵鏈夌殑鏂規硶鍛藉悕涓?testFoo()
銆?code>testBar()錛岀瓑絳夈備緥濡傦紝涓嬮潰鐨勬柟娉曚篃鍙互宸ヤ綔錛?/p>
import org.junit.Test;
import junit.framework.TestCase;
public class AdditionTest extends TestCase {
private int x = 1;
private int y = 1;
@Test public void additionTest() {
int z = x + y;
assertEquals(2, z);
}
}
|
涓嬮潰榪欎釜鏂規硶涔熷悓鏍瘋兘澶熷伐浣滐細
import org.junit.Test;
import junit.framework.TestCase;
public class AdditionTest extends TestCase {
private int x = 1;
private int y = 1;
@Test public void addition() {
int z = x + y;
assertEquals(2, z);
}
}
|
榪欏厑璁告偍閬靛驚鏈閫傚悎鎮ㄧ殑搴旂敤紼嬪簭鐨勫懡鍚嶇害瀹氥備緥濡傦紝鎴戜粙緇嶇殑涓浜涗緥瀛愰噰鐢ㄧ殑綰﹀畾鏄紝嫻嬭瘯綾誨鍏舵祴璇曟柟娉曚嬌鐢ㄤ笌琚祴璇曠殑綾葷浉鍚岀殑鍚嶇О銆備緥濡傦紝List.contains()
鐢?ListTest.contains()
嫻嬭瘯錛?code>List.add() 鐢?ListTest.addAll()
嫻嬭瘯錛岀瓑絳夈?/p>
TestCase
綾諱粛鐒跺彲浠ュ伐浣滐紝浣嗘槸鎮ㄤ笉鍐嶉渶瑕佹墿灞曞畠浜嗐傚彧瑕佹偍鐢?@Test
鏉ユ敞閲婃祴璇曟柟娉曪紝灝卞彲浠ュ皢嫻嬭瘯鏂規硶鏀懼埌浠諱綍綾諱腑銆備絾鏄偍闇瑕佸鍏?junit.Assert
綾諱互璁塊棶鍚勭 assert 鏂規硶錛屽涓嬫墍紺猴細
import org.junit.Assert;
public class AdditionTest {
private int x = 1;
private int y = 1;
@Test public void addition() {
int z = x + y;
Assert.assertEquals(2, z);
}
}
|
鎮ㄤ篃鍙互浣跨敤 JDK 5 涓柊鐗規э紙static import錛夛紝浣垮緱涓庝互鍓嶇増鏈竴鏍風畝鍗曪細
import static org.junit.Assert.assertEquals;
public class AdditionTest {
private int x = 1;
private int y = 1;
@Test public void addition() {
int z = x + y;
assertEquals(2, z);
}
}
|
榪欑鏂規硶浣垮緱嫻嬭瘯鍙椾繚鎶ょ殑鏂規硶闈炲父瀹規槗錛屽洜涓烘祴璇曟渚嬬被鐜板湪鍙互鎵╁睍鍖呭惈鍙椾繚鎶ゆ柟娉曠殑綾諱簡銆?
SetUp 鍜?TearDown
JUnit 3 嫻嬭瘯榪愯紼嬪簭錛坱est runner錛変細鍦ㄨ繍琛屾瘡涓祴璇曚箣鍓嶈嚜鍔ㄨ皟鐢?setUp()
鏂規硶銆傝鏂規硶涓鑸細鍒濆鍖栧瓧孌碉紝鎵撳紑鏃ュ織璁板綍錛岄噸緗幆澧冨彉閲忥紝絳夌瓑銆備緥濡傦紝涓嬮潰鏄憳鑷?XOM 鐨?XSLTransformTest
涓殑 setUp()
鏂規硶錛?/p>
protected void setUp() {
System.setErr(new PrintStream(new ByteArrayOutputStream()));
inputDir = new File("data");
inputDir = new File(inputDir, "xslt");
inputDir = new File(inputDir, "input");
}
|
鍦?JUnit 4 涓紝鎮ㄤ粛鐒跺彲浠ュ湪姣忎釜嫻嬭瘯鏂規硶榪愯涔嬪墠鍒濆鍖栧瓧孌靛拰閰嶇疆鐜銆傜劧鑰岋紝瀹屾垚榪欎簺鎿嶄綔鐨勬柟娉曚笉鍐嶉渶瑕佸彨鍋?setUp()
錛屽彧瑕佺敤 @Before
娉ㄩ噴鏉ユ寚紺哄嵆鍙紝濡備笅鎵紺猴細
@Before protected void initialize() {
System.setErr(new PrintStream(new ByteArrayOutputStream()));
inputDir = new File("data");
inputDir = new File(inputDir, "xslt");
inputDir = new File(inputDir, "input");
}
|
鐢氳嚦鍙互鐢?@Before
鏉ユ敞閲婂涓柟娉曪紝榪欎簺鏂規硶閮藉湪姣忎釜嫻嬭瘯涔嬪墠榪愯錛?
@Before protected void findTestDataDirectory() {
inputDir = new File("data");
inputDir = new File(inputDir, "xslt");
inputDir = new File(inputDir, "input");
}
@Before protected void redirectStderr() {
System.setErr(new PrintStream(new ByteArrayOutputStream()));
}
|
娓呴櫎鏂規硶涓庢綾諱技銆傚湪 JUnit 3 涓紝鎮ㄤ嬌鐢?tearDown()
鏂規硶錛岃鏂規硶綾諱技浜庢垜鍦?XOM 涓負娑堣楀ぇ閲忓唴瀛樼殑嫻嬭瘯鎵浣跨敤鐨勬柟娉曪細
protected void tearDown() {
doc = null;
System.gc();
}
|
瀵逛簬 JUnit 4錛屾垜鍙互緇欏畠鍙栦竴涓洿鑷劧鐨勫悕縐幫紝騫剁敤 @After
娉ㄩ噴瀹冿細
@After protected void disposeDocument() {
doc = null;
System.gc();
}
|
涓?@Before
涓鏍鳳紝涔熷彲浠ョ敤 @After
鏉ユ敞閲婂涓竻闄ゆ柟娉曪紝榪欎簺鏂規硶閮藉湪姣忎釜嫻嬭瘯涔嬪悗榪愯銆?/p>
鏈鍚庯紝鎮ㄤ笉鍐嶉渶瑕佸湪瓚呯被涓樉寮忚皟鐢ㄥ垵濮嬪寲鍜屾竻闄ゆ柟娉曪紝鍙瀹冧滑涓嶈瑕嗙洊鍗沖彲錛屾祴璇曡繍琛岀▼搴忓皢鏍規嵁闇瑕佽嚜鍔ㄤ負鎮ㄨ皟鐢ㄨ繖浜涙柟娉曘傝秴綾諱腑鐨?@Before
鏂規硶鍦ㄥ瓙綾諱腑鐨?@Before
鏂規硶涔嬪墠琚皟鐢紙榪欏弽鏄犱簡鏋勯犲嚱鏁拌皟鐢ㄧ殑欏哄簭錛夈?code>@After 鏂規硶浠ュ弽鏂瑰悜榪愯錛氬瓙綾諱腑鐨勬柟娉曞湪瓚呯被涓殑鏂規硶涔嬪墠琚皟鐢ㄣ傚惁鍒欙紝澶氫釜 @Before
鎴?@After
鏂規硶鐨勭浉瀵歸『搴忓氨寰椾笉鍒頒繚璇併?/p>
濂椾歡鑼冨洿鐨勫垵濮嬪寲
JUnit 4 涔熷紩鍏ヤ簡涓涓?JUnit 3 涓病鏈夌殑鏂扮壒鎬э細綾昏寖鍥寸殑 setUp()
鍜?tearDown()
鏂規硶銆備換浣曠敤 @BeforeClass
娉ㄩ噴鐨勬柟娉曢兘灝嗗湪璇ョ被涓殑嫻嬭瘯鏂規硶榪愯涔嬪墠鍒氬ソ榪愯涓嬈★紝鑰屼換浣曠敤 @AfterClass
娉ㄩ噴鐨勬柟娉曢兘灝嗗湪璇ョ被涓殑鎵鏈夋祴璇曢兘榪愯涔嬪悗鍒氬ソ榪愯涓嬈°?/p>
渚嬪錛屽亣璁劇被涓殑姣忎釜嫻嬭瘯閮戒嬌鐢ㄤ竴涓暟鎹簱榪炴帴銆佷竴涓綉緇滆繛鎺ャ佷竴涓潪甯稿ぇ鐨勬暟鎹粨鏋勶紝鎴栬呰繕鏈変竴浜涘浜庡垵濮嬪寲鍜屼簨鎯呭畨鎺掓潵璇存瘮杈冩槀璐電殑鍏朵粬璧勬簮銆備笉瑕佸湪姣忎釜嫻嬭瘯涔嬪墠閮介噸鏂板垱寤哄畠錛屾偍鍙互鍒涘緩瀹冧竴嬈★紝騫惰繕鍘熷畠涓嬈°傝鏂規硶灝嗕嬌寰楁湁浜涙祴璇曟渚嬭繍琛岃搗鏉ュ揩寰楀銆備緥濡傦紝褰撴垜嫻嬭瘯璋冪敤絎笁鏂瑰簱鐨勪唬鐮佷腑鐨勯敊璇鐞嗘椂錛屾垜閫氬父鍠滄鍦ㄦ祴璇曞紑濮嬩箣鍓嶉噸瀹氬悜 System.err
錛屼互渚胯緭鍑轟笉琚鏈熺殑閿欒娑堟伅鎵撲貢銆傜劧鍚庢垜鍦ㄦ祴璇曠粨鏉熷悗榪樺師瀹冿紝濡備笅鎵紺猴細
// This class tests a lot of error conditions, which
// Xalan annoyingly logs to System.err. This hides System.err
// before each test and restores it after each test.
private PrintStream systemErr;
@BeforeClass protected void redirectStderr() {
systemErr = System.err; // Hold on to the original value
System.setErr(new PrintStream(new ByteArrayOutputStream()));
}
@AfterClass protected void tearDown() {
// restore the original value
System.setErr(systemErr);
}
|
娌℃湁蹇呰鍦ㄦ瘡涓祴璇曚箣鍓嶅拰涔嬪悗閮借繖鏍峰仛銆備絾鏄竴瀹氳灝忓績瀵瑰緟榪欎釜鐗規с傚畠鏈夊彲鑳戒細榪濆弽嫻嬭瘯鐨勭嫭绔嬫э紝騫跺紩鍏ラ潪棰勬湡鐨勬販涔便傚鏋滀竴涓祴璇曞湪鏌愮紼嬪害涓婃敼鍙樹簡 @BeforeClass
鎵鍒濆鍖栫殑涓涓璞★紝閭d箞瀹冩湁鍙兘浼氬獎鍝嶅叾浠栨祴璇曠殑緇撴灉銆傚畠鏈夊彲鑳藉湪嫻嬭瘯濂椾歡涓紩鍏ラ『搴忎緷璧栵紝騫墮殣钘?bug銆備笌浠諱綍浼樺寲涓鏍鳳紝鍙湪鍓栨瀽鍜屽熀鍑嗘祴璇曡瘉鏄庢偍鍏鋒湁瀹為檯鐨勯棶棰樹箣鍚庢墠瀹炵幇榪欎竴鐐廣傝繖灝辨槸璇達紝鎴戠湅鍒頒簡涓嶆涓涓祴璇曞浠惰繍琛屾椂闂村姝や箣闀匡紝浠ヨ嚦涓嶈兘鍍忓畠鎵闇瑕佺殑閭f牱緇忓父榪愯錛屽挨鍏舵槸閭d簺闇瑕佸緩绔嬪緢澶氱綉緇滃拰鏁版嵁搴撹繛鎺ョ殑嫻嬭瘯銆傦紙渚嬪錛孡imeWire 嫻嬭瘯濂椾歡榪愯鏃墮棿瓚呰繃涓ゅ皬鏃躲傦級瑕佸姞蹇繖浜涙祴璇曞浠訛紝浠ヤ究紼嬪簭鍛樺彲浠ユ洿鍔犵粡甯稿湴榪愯瀹冧滑錛屾偍鍙互鍋氱殑灝辨槸鍑忓皯 bug銆?/p>
嫻嬭瘯寮傚父
寮傚父嫻嬭瘯鏄?JUnit 4 涓殑鏈澶ф敼榪涖傛棫寮忕殑寮傚父嫻嬭瘯鏄湪鎶涘嚭寮傚父鐨勪唬鐮佷腑鏀懼叆 try
鍧楋紝鐒跺悗鍦?try
鍧楃殑鏈熬鍔犲叆涓涓?fail()
璇彞銆備緥濡傦紝璇ユ柟娉曟祴璇曡闆墮櫎鎶涘嚭涓涓?ArithmeticException
錛?/p>
public void testDivisionByZero() {
try {
int n = 2 / 0;
fail("Divided by zero!");
}
catch (ArithmeticException success) {
assertNotNull(success.getMessage());
}
}
|
璇ユ柟娉曚笉浠呴毦鐪嬶紝鑰屼笖璇曞浘鎸戞垬浠g爜瑕嗙洊宸ュ叿錛屽洜涓轟笉綆℃祴璇曟槸閫氳繃榪樻槸澶辮觸錛屾繪湁涓浜涗唬鐮佷笉琚墽琛屻傚湪 JUnit 4 涓紝鎮ㄧ幇鍦ㄥ彲浠ョ紪鍐欐姏鍑哄紓甯哥殑浠g爜錛屽茍浣跨敤娉ㄩ噴鏉ュ0鏄庤寮傚父鏄鏈熺殑錛?
@Test(expected=ArithmeticException.class)
public void divideByZero() {
int n = 2 / 0;
}
|
濡傛灉璇ュ紓甯告病鏈夋姏鍑猴紙鎴栬呮姏鍑轟簡涓涓笉鍚岀殑寮傚父錛夛紝閭d箞嫻嬭瘯灝卞皢澶辮觸銆備絾鏄鏋滄偍鎯寵嫻嬭瘯寮傚父鐨勮緇嗘秷鎭垨鍏朵粬灞炴э紝鍒欎粛鐒墮渶瑕佷嬌鐢ㄦ棫寮忕殑 try-catch
鏍峰紡銆?/p>
琚拷鐣ョ殑嫻嬭瘯
涔熻鎮ㄦ湁涓涓祴璇曡繍琛岀殑鏃墮棿闈炲父鍦伴暱銆備笉鏄榪欎釜嫻嬭瘯搴旇榪愯寰楁洿蹇紝鑰屾槸璇村畠鎵鍋氱殑宸ヤ綔浠庢牴鏈笂姣旇緝澶嶆潅鎴栫紦鎱€傞渶瑕佽闂繙紼嬬綉緇滄湇鍔″櫒鐨勬祴璇曢氬父閮藉睘浜庤繖涓綾匯傚鏋滄偍涓嶅湪鍋氬彲鑳戒細涓柇璇ョ被嫻嬭瘯鐨勪簨鎯咃紝閭d箞鎮ㄥ彲鑳芥兂瑕佽煩榪囪繍琛屾椂闂撮暱鐨勬祴璇曟柟娉曪紝浠ョ緝鐭紪璇?嫻嬭瘯-璋冭瘯鍛ㄦ湡銆傛垨鑰呬篃璁告槸涓涓洜涓鴻秴鍑烘偍鐨勬帶鍒惰寖鍥寸殑鍘熷洜鑰屽け璐ョ殑嫻嬭瘯銆備緥濡傦紝W3C XInclude 嫻嬭瘯濂椾歡嫻嬭瘯 Java 榪樹笉鏀寔鐨勪竴浜?Unicode 緙栫爜鐨勮嚜鍔ㄨ瘑鍒備笉蹇呰佹槸琚揩鐩綇閭d簺綰㈣壊娉㈡氮綰匡紝榪欑被嫻嬭瘯鍙互琚敞閲婁負 @Ignore
錛屽涓嬫墍紺猴細
// Java doesn't yet support
// the UTF-32BE and UTF32LE encodings
@Ignore public void testUTF32BE()
throws ParsingException, IOException, XIncludeException {
File input = new File(
"data/xinclude/input/UTF32BE.xml"
);
Document doc = builder.build(input);
Document result = XIncluder.resolve(doc);
Document expectedResult = builder.build(
new File(outputDir, "UTF32BE.xml")
);
assertEquals(expectedResult, result);
}
|
嫻嬭瘯榪愯紼嬪簭灝嗕笉榪愯榪欎簺嫻嬭瘯錛屼絾鏄畠浼氭寚鍑鴻繖浜涙祴璇曡璺寵繃浜嗐備緥濡傦紝褰撲嬌鐢ㄦ枃鏈晫闈㈡椂錛屼細杈撳嚭涓涓?#8220;I”錛堜唬琛?ignore錛夛紝鑰屼笉鏄負閫氳繃鐨勬祴璇曡緭鍑烘墍緇忓巻鐨勬椂闂達紝涔熶笉鏄負澶辮觸鐨勬祴璇曡緭鍑?#8220;E”錛?/p>
$ java -classpath .:junit.jar org.junit.runner.JUnitCore
nu.xom.tests.XIncludeTest
JUnit version 4.0rc1
.....I..
Time: 1.149
OK (7 tests)
|
浣嗘槸涓瀹氳灝忓績銆傛渶鍒濈紪鍐欒繖浜涙祴璇曞彲鑳芥湁涓瀹氱殑鍘熷洜銆傚鏋滄案榪滃拷鐣ヨ繖浜涙祴璇曪紝閭d箞瀹冧滑鏈熸湜嫻嬭瘯鐨勪唬鐮佸彲鑳戒細涓柇錛屽茍涓旇繖鏍風殑涓柇鍙兘涓嶈兘琚嫻嬪埌銆傚拷鐣ユ祴璇曞彧鏄竴涓潈瀹滀箣璁★紝涓嶆槸浠諱綍闂鐨勭湡姝hВ鍐蟲柟妗堛?
鏃墮棿嫻嬭瘯
嫻嬭瘯鎬ц兘鏄崟鍏冩祴璇曟渶涓虹棝鑻︾殑鏂歸潰涔嬩竴銆侸Unit 4 娌℃湁瀹屽叏瑙e喅榪欎釜闂錛屼絾鏄畠瀵硅繖涓棶棰樻湁鎵甯姪銆傛祴璇曞彲浠ョ敤涓涓秴鏃跺弬鏁版潵娉ㄩ噴銆傚鏋滄祴璇曡繍琛岀殑鏃墮棿瓚呰繃鎸囧畾鐨勬縐掓暟錛屽垯嫻嬭瘯澶辮觸銆備緥濡傦紝濡傛灉嫻嬭瘯鑺辮垂瓚呰繃鍗婄鏃墮棿鍘繪煡鎵句互鍓嶈緗殑涓涓枃妗d腑鐨勬墍鏈夊厓绱狅紝閭d箞璇ユ祴璇曞け璐ワ細
@Test(timeout=500) public void retrieveAllElementsInDocument() {
doc.query("http://*");
}
|
闄や簡綆鍗曠殑鍩哄噯嫻嬭瘯涔嬪錛屾椂闂存祴璇曚篃瀵圭綉緇滄祴璇曞緢鏈夌敤銆傚湪涓涓祴璇曡瘯鍥捐繛鎺ュ埌鐨勮繙紼嬩富鏈烘垨鏁版嵁搴撳畷鏈烘垨鍙樻參鏃訛紝鎮ㄥ彲浠ュ拷鐣ヨ嫻嬭瘯錛屼互渚夸笉闃誨鎵鏈夊叾浠栫殑嫻嬭瘯銆傚ソ鐨勬祴璇曞浠舵墽琛屽緱瓚沖蹇紝浠ヨ嚦紼嬪簭鍛樺彲浠ュ湪姣忎釜嫻嬭瘯鍙戠敓閲嶅ぇ鍙樺寲涔嬪悗榪愯榪欎簺嫻嬭瘯錛屾湁鍙兘涓澶╄繍琛屽嚑鍗佹銆傝緗竴涓秴鏃朵嬌寰楄繖涓鐐規洿鍔犲彲琛屻備緥濡傦紝濡傛灉瑙f瀽 http://www.ibiblio.org/xml 鑺辮垂浜嗚秴榪?2 縐掞紝閭d箞涓嬮潰鐨勬祴璇曞氨浼氳秴鏃訛細
@Test(timeout=2000)
public void remoteBaseRelativeResolutionWithDirectory()
throws IOException, ParsingException {
builder.build("http://www.ibiblio.org/xml");
}
|
鏂扮殑鏂█
JUnit 4 涓烘瘮杈冩暟緇勬坊鍔犱簡涓や釜 assert()
鏂規硶錛?/p>
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected,
Object[] actual)
|
榪欎袱涓柟娉曚互鏈鐩存帴鐨勬柟寮忔瘮杈冩暟緇勶細濡傛灉鏁扮粍闀垮害鐩稿悓錛屼笖姣忎釜瀵瑰簲鐨勫厓绱犵浉鍚岋紝鍒欎袱涓暟緇勭浉絳夛紝鍚﹀垯涓嶇浉絳夈傛暟緇勪負絀虹殑鎯呭喌涔熶綔浜嗚冭檻銆?
闇瑕佽ˉ鍏呯殑鍦版柟
JUnit 4 鍩烘湰涓婃槸涓涓柊妗嗘灦錛岃屼笉鏄棫妗嗘灦鐨勫崌綰х増鏈侸Unit 3 寮鍙戜漢鍛樺彲鑳戒細鎵懼埌涓浜涘師鏉ユ病鏈夌殑鐗規с?
鏈鏄庢樉鐨勫垹鑺傚氨鏄?GUI 嫻嬭瘯榪愯紼嬪簭銆傚鏋滄偍鎯沖湪嫻嬭瘯閫氳繃鏃剁湅鍒拌祻蹇冩偊鐩殑緇胯壊娉㈡氮綰匡紝鎴栬呭湪嫻嬭瘯澶辮觸鏃剁湅鍒頒護浜虹劍铏戠殑綰㈣壊娉㈡氮綰匡紝閭d箞鎮ㄩ渶瑕佷竴涓叿鏈夐泦鎴?JUnit 鏀寔鐨?IDE錛屾瘮濡?Eclipse銆備笉綆℃槸 Swing 榪樻槸 AWT 嫻嬭瘯榪愯紼嬪簭閮戒笉浼氳鍗囩駭鎴栨崋緇戝埌 JUnit 4 涓?
涓嬩竴涓儕鍠滄槸錛屽け璐ワ紙assert 鏂規硶媯嫻嬪埌鐨勯鏈熺殑閿欒錛変笌閿欒錛堝紓甯告寚鍑虹殑闈為鏈熺殑閿欒錛変箣闂翠笉鍐嶆湁浠諱綍宸埆銆傚敖綆?JUnit 3 嫻嬭瘯榪愯紼嬪簭浠嶇劧鍙互鍖哄埆榪欎簺鎯呭喌錛岃?JUnit 4 榪愯紼嬪簭灝嗕笉鍐嶈兘澶熷尯鍒嗐?
鏈鍚庯紝JUnit 4 娌℃湁 suite()
鏂規硶錛岃繖浜涙柟娉曠敤浜庝粠澶氫釜嫻嬭瘯綾繪瀯寤轟竴涓祴璇曞浠躲傜浉鍙嶏紝鍙彉闀垮弬鏁板垪琛ㄧ敤浜庡厑璁稿皢涓嶇‘瀹氭暟閲忕殑嫻嬭瘯浼犻掔粰嫻嬭瘯榪愯紼嬪簭銆?
鎴戝娑堥櫎浜?GUI 嫻嬭瘯榪愯紼嬪簭騫朵笉鎰熷埌澶珮鍏達紝浣嗘槸鍏朵粬鏇存敼浼間箮鏈夊彲鑳藉鍔?JUnit 鐨勭畝鍗曟с傚彧瑕佽冭檻鏈夊灝戞枃妗e拰 FAQ 褰撳墠涓撻棬鐢ㄤ簬瑙i噴榪欏嚑鐐癸紝鐒跺悗鑰冭檻瀵逛簬 JUnit 4錛屾偍涓嶅啀闇瑕佽В閲婅繖鍑犵偣浜嗐?
緙栬瘧鍜岃繍琛?JUnit 4
褰撳墠錛岃繕娌℃湁 JUnit 4 鐨勫簱鐗堟湰銆傚鏋滄偍鎯寵浣撻獙鏂扮殑鐗堟湰錛岄偅涔堟偍闇瑕佷粠 SourceForge 涓婄殑 CVS 鐭ヨ瘑搴撹幏鍙栧畠銆傚垎鏀紙branch錛夋槸“Version4”錛堝弬瑙?鍙傝冭祫鏂?/a>錛夈傛敞鎰忥紝寰堝鐨勬枃妗f病鏈夊崌綰э紝浠嶇劧鏄寚浠ユ棫寮忕殑 3.x 鏂瑰紡鍋氫簨銆侸ava 5 瀵逛簬緙栬瘧 JUnit 4 鏄繀闇鐨勶紝鍥犱負 JUnit 4 澶ч噺鐢ㄥ埌娉ㄩ噴銆佹硾鍨嬩互鍙?Java 5 璇█綰х殑鍏朵粬鐗規с?
鑷?JUnit 3 浠ユ潵錛屼粠鍛戒護琛岃繍琛屾祴璇曠殑璇硶鍙戠敓浜嗕竴鐐瑰彉鍖栥傛偍鐜板湪浣跨敤 org.junit.runner.JUnitCore
綾伙細
$ java -classpath .:junit.jar org.junit.runner.JUnitCore
TestA TestB TestC...
JUnit version 4.0rc1
Time: 0.003
OK (0 tests)
|
鍏煎鎬?/span>
Beck 鍜?Gamma 鍔姏緇存寔鍚戝墠鍜屽悜鍚庡吋瀹廣侸Unit 4 嫻嬭瘯榪愯紼嬪簭鍙互榪愯 JUnit 3 嫻嬭瘯錛屼笉鐢ㄥ仛浠諱綍鏇存敼銆傚彧瑕佸皢鎮ㄦ兂瑕佽繍琛岀殑姣忎釜嫻嬭瘯鐨勫叏闄愬畾綾誨悕浼犻掔粰嫻嬭瘯榪愯紼嬪簭錛屽氨鍍忛拡瀵?JUnit 4 嫻嬭瘯涓鏍楓傝繍琛岀▼搴忚凍澶熸櫤鑳斤紝鍙互鍒嗚鯨鍑哄摢涓祴璇曠被渚濊禆浜庡摢涓増鏈殑 JUnit錛屽茍閫傚綋鍦拌皟鐢ㄥ畠銆?
鍚戝悗鍏煎瑕佸洶闅句竴浜涳紝浣嗘槸涔熷彲浠ュ湪 JUnit 3 嫻嬭瘯榪愯紼嬪簭涓繍琛?JUnit 4 嫻嬭瘯銆傝繖涓鐐瑰緢閲嶈錛屾墍浠ヨ濡?Eclipse 涔嬬被鍏鋒湁闆嗘垚 JUnit 鏀寔鐨勫伐鍏峰彲浠ュ鐞?JUnit 4錛岃屼笉闇瑕佹洿鏂般備負浜嗕嬌 JUnit 4 嫻嬭瘯鍙互榪愯鍦?JUnit 3 鐜涓紝鍙互灝嗗畠浠寘瑁呭湪 JUnit4TestAdapter
涓傚皢涓嬮潰鐨勬柟娉曟坊鍔犲埌鎮ㄧ殑 JUnit 4 嫻嬭瘯綾諱腑搴旇灝辮凍澶熶簡錛?
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(AssertionTest.class);
}
|
浣嗘槸鐢變簬 Java 姣旇緝澶氬彉錛屾墍浠?JUnit 4 涓鐐歸兘涓嶅悜鍚庡吋瀹廣侸Unit 4 瀹屽叏渚濊禆浜?Java 5 鐗規с傚浜?Java 1.4 鎴栨洿鏃╃増鏈紝瀹冨皢涓嶄細緙栬瘧鎴栬繍琛屻?/p>
鍓嶆櫙
JUnit 4 榪滄病鏈夌粨鏉熴傚緢澶氶噸瑕佺殑鏂歸潰娌℃湁鎻愬強錛屽寘鎷ぇ閮ㄥ垎鐨勬枃妗c傛垜涓嶆帹鑽愮幇鍦ㄥ氨灝嗘偍鐨勬祴璇曞浠惰漿鎹㈡垚娉ㄩ噴鍜?JUnit 4銆傚嵆浣垮姝わ紝寮鍙戜粛鍦ㄥ揩閫熻繘琛岋紝騫朵笖 JUnit 4 鍓嶆櫙闈炲父鐪嬪ソ銆傚敖綆?Java 2 紼嬪簭鍛樺湪鍙瑙佺殑鏈潵浠嶇劧闇瑕佷嬌鐢?JUnit 3.8錛屼絾鏄偅浜涘凡緇忚漿縐誨埌 Java 5 鐨勭▼搴忓憳鍒欏簲璇ュ緢蹇冭檻浣夸粬浠殑嫻嬭瘯濂椾歡閫傚悎浜庤繖涓柊鐨勬鏋訛紝浠ヤ究鍖歸厤銆?/p>

]]>