你使用断言吗?

Osc*_*Ryz 18 java assert assertions

这不是一个"问题"所以我正在制作CW.

assert
Run Code Online (Sandbox Code Playgroud)

关键字很棒!

它应该让你觉得你的自己对你编写的代码更有信心,但是,直到今天,当我创建一个小型测试类(<20行)时,我意识到自从它被引入以来从未使用它.

哎呀!我几乎没有使用记录器,这确实非常有用,但直到今天我才意识到我不使用断言.

你使用断言吗?如果不是,那是什么原因?

Bar*_*urt 14

我被教导在90年代使用了很多断言,他们很有道理.这是一个很好的防御性编码.

但是,我认为这已经被单元测试所取代,这实际上会强制代码运行并告诉它在哪里被破坏.调试断言需要有人实际运行调试代码并查看ui或日志.单元测试可以实现自动化.

  • 我对这个答案强烈反对.它没有被取代,它已得到补充.单元测试不会替换断言.断言对于避免编程错误非常有用,例如将null传递给不接受null的方法.它就在那里,对于你的眼睛,你的参数不能为空,所以你没有(如果param!= null)到处都是...... (8认同)
  • 在测试期间,老鼠可能不会通过通信电缆啃,玩游戏的人不会耗尽内存,日志文件也不会填满硬盘.当您的程序在生产环境中运行时,可能会发生这些事情.[Hun 00]务实的程序员 (4认同)

Fal*_*ina 14

我一直都在使用它们.它们是练习"早期崩溃"理念的好方法,最好不得不解决为什么断言失败而不是必须处理坏/损坏的输出.

问题是你必须养成一种习惯.我很少看到其中的任何中间地带,人们要么不习惯它,几乎从不使用它们或人们使用它们,并且它们在整个代码中严格乱丢.你只需要注意到"哦,嘿,我在这里不假思索,让我明确确认它'断言(假设)'"

  • 不应该在生产代码中删除断言...它们太有用了解过程失败的原因(想想4或5层中的空传播,这个null来自哪里?).并且不要让我开始打击性能...... (4认同)

Rav*_*lau 11

我使用断言来确保我不会在代码中引入错误.如果我知道一个值应该在一个映射中,我断言(使用assert关键字).如果我知道参数永远不应该为null,我断言.如果我知道参数可以为null,那么我将检查它并抛出相应的异常.

我在Code Complete或Effective Java上阅读它 - 应该使用断言来检测编程错误 - 应该使用异常来处理异常但可能的情况.如果您知道该值不为null(由合同定义),则不需要在代码的每个方法上检查null,但如果值不为null则断言也没有坏处.仅当您为VM指定​​参数-ea时才会启用断言,如果禁用,它们不应影响应用程序的性能.

您也应该使用更多日志:-).了解何时使用跟踪,调试和信息,并确保记录应用程序执行的所有操作.当您必须弄清楚为什么某些东西在生产环境中不起作用时,它会让生活变得如此简单.

  • "断言应该用于检测编程错误"******** (4认同)

jjn*_*guy 2

不,永远不要使用它们。不知道为什么,就是一直没养成这个习惯。