当前位置: 首页 > 面试题库 >

assert(false)vs RuntimeException吗?

谷涵容
2023-03-14
问题内容

我正在阅读XWalkUIClientInternal的源代码,并且遇到了以下代码:

    switch(type) {
        case JAVASCRIPT_ALERT:
            return onJsAlert(view, url, message, result);
        case JAVASCRIPT_CONFIRM:
            return onJsConfirm(view, url, message, result);
        case JAVASCRIPT_PROMPT:
            return onJsPrompt(view, url, message, defaultValue, result);
        case JAVASCRIPT_BEFOREUNLOAD:
            // Reuse onJsConfirm to show the dialog.
            return onJsConfirm(view, url, message, result);
        default:
            break;
    }
    assert(false);
    return false;

我从来没有真正看过这种技术,也从未真正考虑过它,但是我想这实质上意味着“这是无法访问的代码,永远都不会发生”,并且无论如何都会使应用程序崩溃。尽管从技术上讲,您可以使用Throwable做到这一点,只要它未被捕获即可。

所以我的问题是,哪一个更好,为什么,assert(false)或扔RuntimeException,或可能的Error


问题答案:

之间最大的区别

assert false;

(不需要括号,assert不是函数而是语句。)和

throw new RuntimeException();

是断言可以被禁用。实际上,默认情况下它 默认禁用的,除非JVM使用-ea(“启用声明”)标志启动。如果启用了断言,assert false将无条件引发AssertionError从派生的Error。但是由于可以禁用断言,因此存在两个问题,

  • 该错误可能未被发现,
  • 控制流分析需要returnassert(之后很杂乱)之后添加一个伪语句。

因此,在上述情况下,我当然会明确(更简洁)

throw new AssertionError("invalid type " + type);

而不是assert后面跟一个假人return

如评论中所述,这是假定它type是一个内部参数,而无效值表示逻辑本身存在错误。如果它是输入参数,则应根据通常的规则对其进行验证,IllegalArgumentException如果验证失败,则将其抛出。



 类似资料:
  • 问题内容: 我正在编写测试,并且听说有人说使用而不是。为什么会这样,并且有什么优势? 问题答案: 在没有有用的日志记录信息的情况下引发异常。测试有错误。 抛出带有消息和测试名称之类的测试失败信息的测试失败异常。 错误(测试甚至无法运行)与失败(测试代码可以工作但产生错误的答案)之间是有区别的。 错误是您的代码的严重问题。 失败只是需要修复的失败。

  • Assert为Go语测试框架封装. 可以让我们熟悉的方式来写测试用例. 使用方式如下图:

  • Fast assert 是 PHP 的扩展,提供一个很好的方式来构建 php 的 Assertions,同时还提供各种 Assertions 设备,使用简洁的函数链语法,不需要任何的性能开销。

  • 稳定性: 2 - 稳定的 assert 模块提供了一组简单的断言测试集合,可被用于测试不变式。 assert(value[, message]) 新增于: v0.5.9 value <any> message <any> assert.ok() 的别名。 assert.deepEqual(actual, expected[, message]) 版本历史 版本 变更 v8.0.0 Set and

  • 由来 Java中有assert关键字,但是存在许多问题: assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。 用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常

  • Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。 assert 语句的语法结构为: assert 表达式 assert 语句的执行流程可以用 if 判断语句表示,如下所示: if 表达式==True:     程序继续执行 else: