gpt4 book ai didi

java - 在 JUnit 测试中尝试 catch

转载 作者:IT老高 更新时间:2023-10-28 20:29:50 24 4
gpt4 key购买 nike

我正在为一个已经存在很长时间的应用程序编写单元测试。我需要测试的一些方法是这样构建的:

public void someMethod() throws Exception { 
//do something
}

如果我想测试这些方法,我必须在我的单元测试中写这样的东西:

@Test
public void someTest() {
try {
someMethod();
}
catch (Exception e) {
e.printStackTrace();
}
}

这样做是个好习惯吗?或者还有其他方法可以测试这些方法吗?

我在互联网上进行了一些研究,并找到了一些带有 @Rule 注释和 @Test(expected=Exception.class) 的解决方案,但这不起作用(Eclipse 一直将测试中的 someMethod() 行显示为错误)。我不知道这些是否是好的解决方案,因为我对整个单元测试故事还很陌生。

如果有对此了解很多的人可以帮助我,我将非常感激。

最佳答案

由于 Exception 是已检查异常,您可以:

  • 必须在 try...catch 语句中捕获异常,或者
  • 在方法本身中声明要抛出的异常。

你在那里工作正常,但我个人的偏好是声明要抛出的异常。这样,如果在测试运行期间抛出了我不期望的异常,测试将失败

@Test
public void someTest() throws Exception {
// dodgy code here
}

如果我们需要查看是否抛出了特定的异常,那么您可以选择使用 @Rule 或直接将值添加到 @Test 注释中。

@Test(expected = FileNotFoundException.class)
public void someTest() throws Exception {
// dodgy code here
}

在 JUnit 5 中,您可以利用 Assertions.assertThrows完成同样的事情。我对这个整体不太熟悉,因为在编辑时它还不是 GA,但它似乎接受来自 JUnit 5 的 Executable

@Test
public void someTest() {
assertThrows(FileNotFoundException.class, () ->
{ dodgyService.breakableMethod() };
}

关于java - 在 JUnit 测试中尝试 catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31423643/

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