gpt4 book ai didi

java - 捕获 Junit 中抛出的异常,而不会将 Throwable block 吞没

转载 作者:行者123 更新时间:2023-12-01 16:53:50 26 4
gpt4 key购买 nike

我有一个类可以除两个数字。当一个数字除以 0 时,会抛出 ArithmeticException。但是当我对此进行单元测试时,在控制台上显示抛出了 ArithmeticException,但我的测试失败并出现 AssertionError。我想知道是否有办法证明在Junit中抛出ArithmeticException?
示例.java

public class Example {

public static void main(String[] args)
{
Example ex = new Example();
ex.divide(10, 0);
}

public String divide(int a, int b){
int x = 0;
try{
x = a/b;
}
catch(ArithmeticException e){
System.out.println("Caught Arithmetic Exception!");
}
catch(Throwable t){
System.out.println("Caught a Different Exception!");
}
return "Result: "+x;
}
}

示例测试.java

public class ExampleTest {
@Test(expected=ArithmeticException.class)
public void divideTest()
{
Example ex = new Example();
ex.divide(10, 0);
}
}

我的实际代码是不同的,因为它有很多依赖项,我简化了对此示例测试的要求。请提出建议。

最佳答案

divide 不会引发此异常。

您的选择是

  • 将 try/catch 的内部部分提取为可以从单元测试中调用的方法。
  • 在单元测试中捕获 System.err 并检查它是否尝试打印您期望的错误。

您可以像这样使用 IDE 提取方法

public static String divide(int a, int b){
int x = 0;
try{
x = divide0(a, b);
}
catch(ArithmeticException e){
System.out.println("Caught Arithmetic Exception!");
}
catch(Throwable t){
System.out.println("Caught a Different Exception!");
}
return "Result: "+x;
}

static int divide0(int a, int b) {
return a/b;
}

@Test(expected = ArithmeticException.class)
public void testDivideByZero() {
divide0(1, 0);
}

关于java - 捕获 Junit 中抛出的异常,而不会将 Throwable block 吞没,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com