我正在阅读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
。但是由于可以禁用断言,因此存在两个问题,
return
在assert
(之后很杂乱)之后添加一个伪语句。因此,在上述情况下,我当然会明确(更简洁)
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: