文|碼術張
如何驗證拋出的異常是指定的異常?
下面介紹兩種方法。
方法一:
public class Test1 {
@Test(expected = IllegalArgumentException.class)
public void test1() {
throw new IllegalArgumentException();
}
}
期望的表達方式為
(expected = IllegalArgumentException.class)
拋異常的代碼為:
throw new IllegalArgumentException();
意思為拋出一個異常IllegalArgumentException。
在實際代碼中,將這句換成需要拋異常的代碼即可。
如果拋出的異常與期望的一致,那么運行結果就是pass。
如果不一致,則會fail。
例如,正面這段代碼,期望拋出異常IllegalArgumentException,實際拋的是NullPointerException。
public class Test2 {
@Test(expected = IllegalArgumentException.class)
public void test2() {
throw new NullPointerException();
}
}
運行結果會是fail,并且給出提示:
result.png
方法二:
public class Test3 {
@Rule
public ExpectedException worker = ExpectedException.none();
@Test
public void test3() {
worker.expect(IllegalArgumentException.class);
throw new IllegalArgumentException();
}
}
使用ExpectedException判斷是否有期望的異常。
首先,聲明一個ExpectedException類型的變量。
然后,告訴它期望的異常。
worker.expect(IllegalArgumentException.class);
意思是期望的異常為IllegalArgumentException。
throw new IllegalArgumentException();
拋出一個異常。寫代碼時,將這句換成實際要拋異常的代碼。
如果拋出的與期望的異常一致,則pass。否則,fail,并給出錯誤提示。
例如,正面這段代碼:
期望的是IllegalArgumentException。
實際的拋出的是NullPointerException。
public class Test4 {
@Rule
public ExpectedException worker = ExpectedException.none();
@Test
public void test4() {
worker.expect(IllegalArgumentException.class);
throw new NoSuchFieldError();
}
}
運行結果如下:
result 2.png