在Java中使用assert

8 浏览
0 Comments

在Java中使用assert

可能的重复问题:
\nJava中的assert关键字
\nassert vs. JUnit断言 \n我使用JUnit进行单元测试,但有很多时候很难通过JUnit获取到某些东西。我最近开始研究Java的assert。\n使用assert是一个好主意吗?你会如何推荐使用它?

0
0 Comments

在Java中使用assert可以用来在运行时验证程序的正确性。我通常使用它来根据"快速失败"原则来捕捉错误,以主动检测bug。一个典型的用例是一个操作成功完成。考虑以下示例:

int nChanges = database.update(..);
assert(nChanges == 1);

我不会考虑在参数验证或其他需要根据合同在常规代码中进行验证的操作中使用它,因为它不会抛出适当的异常(并且运行时异常可能会很糟糕)。同样,我也不会在测试中使用它,因为JUnit已经提供了assert机制,与常规的assert语句不同,它们无法被禁用。

0
0 Comments

在Java中使用断言的原因是,断言在没有异常处理的语言中很受欢迎,可以进行检查以确保程序正常运行,从而更容易诊断问题。然而,如果断言触发,可能会存在最适当的行动是什么的一些模棱两可。如果程序立即退出,可能会浪费处理失败的机会(例如向用户报告失败并尝试恢复数据)。如果程序不立即退出,由于错误,可能处于未知状态,这也是不可取的。

因此,当给定条件失败时,在Java中抛出异常被认为是更好的做法,它可以解决这些问题。对于程序正常运行可能出现的错误,最适合使用检查异常。调用代码有责任处理这些错误。对于由内部程序逻辑故障引起的错误,抛出RuntimeException将使程序能够在调用堆栈的更高层次上适当地处理错误。

断言确实有一个好处,就是可以在开发中使用,但可以在消费者或发布版本中“编译出来”,其中执行速度比早期检测和处理错误更重要。然而,需要这种特性的应用程序在Java中并不常见(更有可能是C ++),这也是为什么在Java中断言很少见的原因。

我完全不同意。断言非常有用。它们在Java中比C ++重要性较低的原因仅仅是因为Java是一种更安全的语言,因此大多数断言失败的机会,例如数组索引越界,已经为您检查了。断言和异常之间的关键区别是:异常是针对您在生产中偶尔遇到的不寻常情况,您可以从中恢复。断言是针对只有在代码中存在错误时才会出现的情况。唯一的恢复方法是返回并修复代码。

因此,断言仅用于开发阶段。这就是为什么需要打开它们才能使用它们的原因。(默认情况下它们是关闭的)。在生产中,您应该将它们关闭。使用断言的整个原因是为了捕捉潜在的错误。这就是为什么它们抛出错误而不是异常。它们不应该是您常规异常处理的一部分。此外,由于在生产中关闭它们,您可以承担写一些执行大量工作(并减慢速度)以确保代码按预期工作的断言的成本。通常情况下,您不需要这样做,但如果需要,可以选择使用它们的选项。

0
0 Comments

在Java中使用断言(assert)的原因是为了在代码中检测和验证假设是否成立。使用断言可以在特定情况下触发错误,从而帮助开发人员发现和调试问题。

断言和测试代码是两个不同的任务,尽管它们可能相关。断言主要用于在代码中检查和验证假设,而测试代码主要用于验证整个程序的正确性。

在Java中,可以使用关键字"assert"来定义断言。断言通常用于在代码中检查预期的条件是否为真。如果断言条件为假,则会触发AssertionError异常,表示断言失败。

然而,Java文档中的断言链接已经失效。可以通过以下两个链接获取关于在Java中使用断言的信息:

- "Programming with Assertions":这是Oracle官方提供的关于在Java中使用断言的技术指南。

- "Using Assertions in Java":这是Oracle官方提供的关于在Java中使用断言的详细说明。

以上是关于在Java中使用断言的原因和解决方法的概述。使用断言可以帮助开发人员在代码中验证假设是否成立,并及早发现和解决问题。

0