Java IDEA JUnit 单元测试

编写JUnit单元测试

  写一个计算n的加法的Java方法。

image

 我们可以针对刚刚写的Java编写一个对应的测试代码对其进行测试,在IDEA中可以直接右击点击生成Junit测试。

image

image

image

 注意测试库的JUnit版本要和maven版本一致,不然会报错。

点击确定生成一个dddTest.java文件。

这是JUnit会把带有@Test的方法识别为测试方法,因此需要给测试方法加上@Test注解,测试方法内部用assertEquals(2, ddd.fact(1))表示期望Factorial.fact(1)返回2。

image

 运行这个测试程序,JUnit就会给出成功的测试和失败的测试,还可以生成测试报告,不仅包含测试的成功率,还可以统计测试的代码覆盖率,即被测试的代码本身有多少经过了测试。

image

 

使用Fixture自动执行代码

  Fixture是JUnit提供的编写测试前准备、测试后清理的固定代码,可以用于测试前和测试后自动执行代码。

  先编写一个简单的实现加减法功能的Calculator代码。

image

 但是测试的时候,需要先初始化对象,可以使用@BeforeEach和@AfterEach标记的方法,@BeforeEach标记的方法会在执行每个@Test的方法之前调用,而@AfterEach标记的方法会在执行每个@Test的方法之后调用,这样就可以通过@BeforeEach和@AfterEach标记来自动实现对象的生成和销毁。

image

然后再编写我们的测试代码。

image

运行测试代码,可以看到测试结果。

image

 如果需要在所有@Test方法运行前后仅运行一次,那么可以使用@BeforeAll和@AfterAll对方法进行标记。

异常测试

  对于可能抛出的异常进行测试是测试的重要环节,因此在编写JUnit测试的时候,除了正常的输入输出,还要特别针对可能导致异常的情况进行测试。

  在计算阶乘的方法中增加对参数n的检查,如果n为负数,则直接抛出异常IllegalArgumentException。

image

 在测试代码中,我们可以编写一个@Test方法专门测试异常,JUnit提供assertThrows函数来期望捕获一个指定的异常。

image

 运行测试代码,可以看到测试结果。

image

 

条件测试

  条件测试可以在满足某种条件下执行某些测试方法,不执行某些测试方法。

  编写一个程序,该程序中的方法在Windows上跑和在Linux上跑的代码路径不同。

 

image

 编写测试代码的时候,用@EnableOnOs标记方法,指定只有在特定系统下才执行该测试方法。

image

 用@DisabledOnOs标记方法表示不在某个系统上执行该方法。

image

 用@EnabledIfEnvironmentVariable标记方法表示需要传入环境变量DEBUG=true才能执行的测试。

image

 运行测试代码,可以看到测试结果。

image

 

参数化测试

  JUnit提供了一个@ParameterizedTest注解,用来进行参数化测试。参数化测试和普通测试稍微不同的地方在于,一个测试方法需要接收至少一个参数,然后,传入一组参数反复运行。

  编写一个方法,该方法把字符串的第一个字母变为大写,后续字母变为小写。

image

 在编写测试代码的时候,需要给出输入和预期输出,可以通过@MethodSource注解,它允许我们编写一个同名的静态方法来提供测试参数,编写一个静态方法testCapitalize返回了一组测试参数,每个参数都包含两个String,作为测试方法的两个参数传入。

image

 还可以使用@CsvSource标记传入测试参数的方法,它的每一个字符串表示一行,一行包含的若干参数用 , 分隔。

image

 如果测试数据很多,可以把测试数据提到一个独立的CSV文件中,标注上@CsvFileSource表示从CSV文件中读取数据。

image

 由于JUnit只在classpath中查找指定的CSV文件,因此,test-capitalize.csv这个文件要放到src/main/resources目录下,内容格式如下图所示。

image

 运行测试程序,测试结果如下图所示。

image

 

posted @ 2025-11-07 17:02  溺水的小金鱼  阅读(0)  评论(0)    收藏  举报