CodeGym /Java 博客 /随机的 /Java 断言
John Squirrels
第 41 级
San Francisco

Java 断言

已在 随机的 群组中发布
Java 中的 Assert 语句用于测试有关程序执行期间状态的某些假设。这有助于轻松检测错误并调试程序。Java 中的断言语句是使用 Java 断言关键字后跟布尔表达式来编写的。如果表达式的计算结果为 true,则断言会默默地通过,并且程序会执行其工作。如果其计算结果为 false,则断言失败并抛出AssertionError 。让我们看一个带有 Java 断言的程序示例。
//Assertion in Java example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 5 : "x should be 5";
       System.out.println(x);
   }
}
这里的表达式为真,因此程序继续其工作。输出正如预期的那样:
5

断言错误示例

在 Java 中,AssertionError是Error类的子类,当断言失败时会抛出该错误。Java 中的断言通常用于检查前置条件、后置条件或不变量是否成立。正如我们下面所说的,当断言语句无法计算为 true 时,会抛出AssertionError 。现在让我们重写程序,使布尔表达式为 false。
//AssertionError example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 7 : "x should be 7";
       //here should be AssertionError
       System.out.println(x);
   }
}
好吧,我们运行它,输出是......
5
我们的例子中肯定出了问题!我们这里应该有一个AssertionError,因为我们的 x 是 5,而断言期望它是 7。这里出了什么问题?需要注意的是,Java 断言可以在 JVM 中禁用,因此不应将它们用作程序中错误检查的唯一方法。它们对于调试和测试很有用,但不应该依赖于生产代码。因此,要使用断言,您需要使用 vm -ea(或 -enableassertions)选项启用它们。如果您使用命令行,则可以对程序 AssertDemo1 使用下一个命令:
java -ea AssertDemo1
如果您启用断言并重新运行相同的程序,您将得到下一个:
线程“main”中的异常 java.lang.AssertionError: x 应该是 7 at AssertDemo1.main(AssertDemo1.java:4)
这才是重点。

如何在 IntelliJ IDEA 中启用异常

  1. 转到“运行”菜单→“编辑配置...”
  2. 在 VM options 行中输入 -ea 参数
Java 断言 - 1现在断言已启用,您可以使用它们。

Java 单元测试的断言

在 Java 中,单元测试是一种涉及测试各个代码模块以确保它们正常工作的技术。 断言通常用于 Java 的单元测试中,以验证测试的代码是否按预期工作。在单元测试中,代码单元(例如特定方法)被单独测试,以确保它在不同条件和输入下正常工作。让我们举个例子。这里我们有一个简单的计算器,可以进行 2 整数的加法、减法、乘法和除法运算。
public class MyMath {

   public static int add (int a, int b) {
       return a + b;
   }

   public static int sub (int a, int b) {
       return a - b;
   }

   public static int mult (int a, int b) {
       return a*b;
   }

   public static double div (int a, int b) {
       return a/b;
   }
}
当然,关于这个实现有很多问题(例如,如果我们将最大的 int 添加到另一个数字会发生什么),但现在我们将保持这个实现不变。现在让我们编写一个类,在单元测试的帮助下,我们将在其中测试myMath类的方法。确实,只有他们两个。事实上,您可以编写测试来检查参数的有效性、方法是否处理特殊情况等等。但在这里,我们将仅限于几个用于演示目的的测试。
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class MyMathTesting {
   @Test
   public void testAdd() {
       MyMath calculator = new MyMath();
       int sum = calculator.add(2, 3);
       assertEquals(5, sum);
   }

   @Test
   public void testSub() {
       MyMath calculator = new MyMath();
       int sub = calculator.sub(5, 2);
       assertEquals(3, sub);
   }

}
assertEquals方法是检查两个值是否相等断言。如果值不相等,则会抛出断言错误,表明测试失败。在单元测试中使用断言可以帮助您捕获错误并确保您的代码在不同条件和输入下正常工作。尝试自己添加此类除法和乘法测试。这并不难。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION