※設定
<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,如果不出現就會報錯
沒有留言:
張貼留言