gpt4 book ai didi

java - 如何告诉 JUnit 忽略嵌套异常?

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:28 31 4
gpt4 key购买 nike

如果我有两个这样的类(class):

public class A {

public A(boolean bool){
if(bool){
// currently broken
// would throw RuntimeException
}
B.doSomething();
}
}

public class B {

public static void doSomething() throws RuntimeException{
throw new RuntimeException();
}
}

我对A类的单元测试将遵循以下原则:

public class ATest {
@Test (expected=RuntimeException)
public void testA(){
new A(true);
}
}

实际上,测试会成功,因为 B 类方法也会抛出 RuntimeException,并且 A 被破坏的事实不会立即可见。

是否可以在不使用模拟框架的情况下告诉 JUnit 以某种方式忽略来自 B 的异常?

最佳答案

否 - 调用该方法的结果是 RuntimeException,这就是您正在测试的内容。 JUnit 如何区分来自您正在调用的确切方法的 RuntimeException 和来自依赖调用的异常?测试规则之一是,您不必关心结果如何获得的细节,而只需关心结果是如何获得的。 (例如,您可以将 A 构造函数中的代码块移动到单独的方法中,但这不会破坏测试。)

目前,您应该能够轻松地进行失败的测试,只需检查调用 new A(false) 不会 抛出异常。目前该测试将会失败,因为您仍在调用 B.doSomething(),这仍然会抛出异常。

请注意,大多数模拟框架也无济于事,因为您使用的是静态方法 - 您至少应该考虑使 B 成为注入(inject)依赖项(可能带有接口(interface)),以便允许更多控制。

关于java - 如何告诉 JUnit 忽略嵌套异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24630059/

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