JUnit 测试:如何使用 try-catch 块检查错误

2023-12-31

因此,我需要为我正在改进的一些(遗留)代码编写测试。在一个方法中,我尝试解析一些字符串(应该是合法的 JSON)。那么一个可能的JSONException如果字符串不代表有效的 JSON,则会捕获该错误。就像是:

public void transformToJSON(String source) {
  try {
    JSONObject js = new JSONObject(new JSONTokener(item.getHtml()));
  }
  catch (JSONException e) {
    log(e)
  }
  //than js is added to an Hashset and the method is done
}

所以我想为良好的输入编写一个测试(看看我是否生成了正确的 JSON 对象)。通过检查集合中的对象,这很“容易”。

然而,对于错误的输入,我需要找出是否抛出了正确的错误。 我知道代码中是否抛出错误,我可以在测试中检查它。

  • 通过设定规则public ExpectedException thrown= ExpectedException.none();并在测试方法中检查它。
  • 通过增加@Test(expected = JSONException.class)高于测试

但两者都不起作用try..catch blocks.

如何测试 catch 块是否捕获了正确的异常?我想尽可能少地更改源代码。


在 JUnit 测试类中你可以做的是使用fail("this should not have happened")在 try 或 catch 块中,具体取决于什么应该工作,什么不应该工作(例如:在 JUnit 类中尝试和 catch,而不是在实际方法中!)。

但是,使用方法中的 try/catch 块,您无法查看是否发生异常,因为它是在方法内处理的。因此,您必须在方法中抛出异常而不是捕获它,即

public void transformToJSON(String source) throws JSONException { ... }

然后它将检查是否发生异常。

或者,您可以返回一个布尔值,表明转换是否成功。然后您可以测试返回值是否为真/假以及是否符合您的预期。

public boolean transformToJSON(String source) {
  boolean success = true;
  try {
    JSONObject js = new JSONObject(new JSONTokener(item.getHtml()));
  }
  catch (JSONException e) {
    log(e)
    success = false;
  }
  //than js is added to an Hashset and the method is done
  return success;
}

在你的测试类中:

@Test
public void testTransformToJSON() {
      assertTrue(transformToJSON("whatever"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JUnit 测试:如何使用 try-catch 块检查错误 的相关文章

随机推荐

  • 干净地中断 HttpListener 的 BeginGetContext 方法

    我正在使用一个Http监听器 http msdn microsoft com en us library 34xswsd2 28v vs 100 29 aspx并使用开始获取上下文 http msdn microsoft com en us
  • 如何在 Codable 结构中添加自定义瞬态属性

    我有以下可按预期工作的可编码结构 struct VideoAlbum Codable let id image String let video mediaType JSONNull let type deleted createdOn S
  • 我应该将参数存储类说明符放在函数定义中还是同时放在声明和定义中?

    我正在努力将一些旧的 K R 代码移植到 ANSI C 因此我正在编写缺少的函数原型声明 很多函数定义的参数都带有寄存器存储类 但我不确定函数原型中是否可以省略寄存器存储类说明符 无论有或没有寄存器存储类特定声明 代码都能正确编译 我尝试了
  • 是否可以将多个静态库捆绑到一个静态库中[C++]?

    我为我的 C 代码创建了一个静态库 该库依赖于 CentOS 7 环境中的 Boost OpenSSL CURL 和 Threads 可以捆绑吗libboost system a libssl a libcrypto a libcurl a
  • 更改 MediaStream 对象的 VideoTrack

    简而言之 我正在尝试改变VideoTrack of a MediaStream object 文档 https developer mozilla org en US docs WebRTC MediaStream API https de
  • 如何在记事本++中进行非贪婪的正则表达式查询?

    我正在用乳胶写论文 不小心写了 cite 代替 cite 我可以手动浏览整个文档 但我想知道如何使用正则表达式在记事本 中执行此操作 我最初尝试过 cite 并替换为 cite 1 适用于简单的情况 例如 cite hello world
  • Oracle SQL:如何通过预定义贡献获取每个组的随机记录

    这是参考此处描述的先前问题 Oracle SQL 如何获取每组的随机记录 https stackoverflow com questions 36628912 oracle sql how to get random records by
  • Paypal付款成功后返回Ionic应用程序

    我创建了一个 Ionic 应用程序 我有一些物品要订购 付款是使用 Paypal 完成的 我使用 window open url 调用了一个 web url 它将我重定向到 Paypal 我能够成功付款 但是有人可以告诉我付款成功后如何返回
  • 在 SAS 中,捕获语法错误的好技术/选项是什么?

    在增强的编辑器中 颜色可能会给您提示 然而 在大型机上 我不相信编辑器中有任何东西可以帮助您 I use OPTIONS OBS 0 noreplace obs 0 选项指定从输入中读入 0 个观测值 dataset 和 NOREPLACE
  • iPhone开发-模拟内存警告

    背景 我有一个标签栏应用程序 每个选项卡都包含导航控制器 允许用户从一个视图转换到另一个视图 显示数据的深入信息 每个视图都由视图控制器处理 每个视图控制器类都有didReceiveMemoryWarning方法 通过从 Web 服务中提取
  • 透明背景WKWebView(NSView)

    我正在使用 Swift 构建 Mac 应用程序 因此 我想使 WKWebView 透明 以便它显示加载的 HTML 文本 但我的底层 NSWindow 的背景是可见的 我试过 webView layer backgroundColor NS
  • ANDROID:java.lang.NoClassDefFoundError:解析失败:Lcom/mysql/cj/MysqlType

    我正在尝试将我的项目与 mysql 数据库连接 但我在驱动程序中收到此错误 E AndroidRuntime FATAL EXCEPTION main Process com example catalyst PID 12531 java
  • 具有链接轴的 PyQtGraph 网格

    使用 PyQtGraph 进行简单的图形布局 其中图的 x 轴链接在一起 并且网格也显示在两个图中 from pyqtgraph Qt import QtGui QtCore import pyqtgraph as pg app QtGui
  • 具有固定 x 轴和 y 轴的 NVD3.js 多图

    我正在使用 NVD3 js 多图来显示各种数据 是否可以为 x 轴和 y 轴设置固定范围 我做了一个 Plunker 的例子 http plnkr co edit OLN87eIE21tImHktYIH6 p preview http pl
  • 在 Celery 任务中运行 Scrapy 蜘蛛

    我有一个 Django 网站 当用户请求时会发生抓取 并且我的代码在新进程中启动 Scrapy 蜘蛛独立脚本 当然 这对于用户的增加来说是行不通的 像这样的事情 class StandAloneSpider Spider a regular
  • 透明的UITextView

    如何使 UITextView 透明 我在 Interface Builder 中构建了视图 并将 UITextView 放入其中 它覆盖了背景 有任何想法吗 更改背景颜色 并使用不透明度滑块使其完全透明 以编程方式 textView bac
  • C# .NET Rx-System.Reactive 在哪里?

    我有深入的 Java 背景 所以如果我忽略了 C 中明显的东西 请原谅我 但我的研究毫无进展 我正在尝试使用反应式 Rx NET 库 编译器并没有抱怨IObservable但它是通过调用zip方法 它抛出 您是否缺少 using 指令或程序
  • 除非已通过 Windows 资源管理器打开,否则无法打开共享点 UNC 路径

    我希望有人能阐明这一点 因为它一直让我分心 我有一个脚本 如果该路径存在 它将通过 UNC 路径将其创建的报告保存到共享点文档库 否则它将保存到网络驱动器位置的 UNC 路径作为后备 我注意到检查test path 保存 通过 msexce
  • 未找到 XML 扩展

    我有 centos 6 5 服务器 当我尝试使用安装 php 扩展时pecl我收到以下错误 XML Extension not found 所有文档都说默认包含此扩展 为什么此错误仍然存 在 根据php net 上的评论 https sec
  • JUnit 测试:如何使用 try-catch 块检查错误

    因此 我需要为我正在改进的一些 遗留 代码编写测试 在一个方法中 我尝试解析一些字符串 应该是合法的 JSON 那么一个可能的JSONException如果字符串不代表有效的 JSON 则会捕获该错误 就像是 public void tra