此问题在此处已有答案:
How do you assert that a certain exception is thrown in JUnit tests?(34个答案)
JUnit 5: How to assert an exception is thrown?(11个答案)
4天前关闭。
我尝试测试在尝试除以零时是否会引发带有自定义消息的异常。
方法如下:
public static int getMultiplesOfGivenNumber(int number, int[] array){
int multiples = 0;
if (number == 0) {
throw new ArithmeticException("Number cannot be zero");
}else{
for (int i = 0; i < array.length; i++) {
if (array[i] % number == 0) {
multiples += 1;
}
}
}
在搜索了一些解决方案后,我发现这是一种方法,但我的IDE无法识别“预期”...
@Test(expected=java.lang.ArithmeticException.class)
public void testDivideByZero(){
//arrange
int number = 0;
//act
int result = B3_E2.getMultiplesOfGivenNumber(number, intervalFromOneToTen());
//assert
assertEquals(expected, result);
}
我只是不知道为什么我的IDE不能识别“expected”。不知道这是否与Junit版本有关,或者是否与我使用的语法有关。
到目前为止,在我使用的其他测试中,我从来没有在@Test后面放任何东西。我只是在另一个类似问题的线程中找到了这个解决方案。
1条答案
按热度按时间vql8enpb1#
@Test
注解的expected
参数只存在于JUnit 4之后。您必须使用较早版本的JUnit。话虽如此,您不必使用此注解,因此不必仅为了此特性而升级到JUnit 4。
您可以自己使用
try...catch
,并Assert抛出了异常,还Assert自定义消息是它应该是的。这样做的好处是你可以得到异常对象,这样你就可以检查它的内容,并确保它是按预期初始化的。在
ArithmeticException
的情况下,除了消息之外没有什么要检查的,但在其他情况下,可能有很多要检查的。