※設定
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
※會依賴 hamcrest-core 1.3,此包可以使用 Matcher,這樣子 assertThat 方法就可以使用了
※JUnit 不可以用在多執行緒,main 執行緒一跑完,其他的執行緒也沒了,解決方法如下:
1.可以在主執行緒寫 sleep 睡久一點,超過其他執行緒的時間就可以了
2.使用 join,讓其他執行緒先跑完,如「執行緒名稱」.join(),就會先執行完該執行緒才會執行其他執行緒,如果有 5 個執行緒,那5個都得這樣做
3.使用 CountDownLatch 類別, 裡面有 await 和 countDown 方法
可看 JUnitCore 裡的 main 方法,使用的是 System.exit
※@BeforeClass、@Before、@AfterClass、@After、@Test、@Ignore
@BeforeClass
public static void start1() {
System.err.println("class之前執行1");
}
@BeforeClass
public static void start2() {
System.err.println("class之前執行2");
}
@Before
public void begin1() {
System.out.println("方法之前執行1");
}
@Before
public void begin2() {
System.out.println("方法之前執行2");
}
@After
public void end1() {
System.out.println("方法之後執行1");
}
@After
public void end2() {
System.out.println("方法之後執行2\r\n");
}
@AfterClass
public static void theEnd1() {
System.err.println("class之後執行1");
}
@AfterClass
public static void theEnd2() {
System.err.println("class之後執行2");
}
@Test
public void bruceTest1() {
System.out.println("測試1");
}
@Test
public void bruceTest2() {
System.out.println("測試2");
}
@Ignore
@Test
public void bruceTest3() {
System.out.println("測試3");
}
※結果(注意執行順序):
class之前執行2
class之前執行1
方法之前執行2
方法之前執行1
測試1
方法之後執行1
方法之後執行2
方法之前執行2
方法之前執行1
測試2
方法之後執行1
方法之後執行2
class之後執行1
class之後執行2
※@BeforeClass、@AfterClass 一定要 static,錯誤會提示
※@BeforeClass、@AfterClass、@Before、@After、@Test,都只能寫在方法上,而且都沒有參數,也沒有回傳值,也都只能是 public
※@Test 才會執行,但如果又加上 @Ignore 就會忽略
※寫@Ignore 和不寫@Test 的差別如下圖:
紅框會發現有 skipped,此行表示執行了 3 個@Test 的方法,但有一個忽略了,第二個紅框有可以發現圖示是白色的;如果不寫@Test,那就什麼都沒有
※@Test、@Ignore 的參數
@Test(expected = ArithmeticException.class)
public void bruceTest1() {
System.out.println(1 / 0);
}
@Test(timeout = 1000)
public void bruceTest2() {
try {
Thread.sleep(1100);
System.out.println("哈哈哈");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Ignore("忽略理由")
@Test
public void bruceTest3() {
System.out.println("測試3");
}
※@Ignore 可以寫在方法或類別上,忽略方法或忽略整個類別,參數可以寫忽略的理由
※@Test 的屬性 timeout 的單位是毫秒,如果超過這個時間就會報錯
※@Test 的屬性 expected 是預期會出現的 Exception,如果不出現就會報錯

沒有留言:
張貼留言