JUnit单元测试

[复制链接]
admin 发表于 7 小时前 | 显示全部楼层 |阅读模式
通过main方法是可以进行测试的,可以测试程序是否正常运行。但是main方法进行测试时,会存在如下问题
测试代码与源代码未分开,难维护。一个方法测试失败,影响后面方法。无法自动化测试,得到测试报告。

而如果我们使用了JUnit单元测试框架进行测试,将会有以下优势
测试代码与源代码分开,便于维护。可根据需要进行自动化测试。可自动分析测试结果,产出测试报告。

入门程序
需求:使用JUnit,对UserService中的业务方法进行单元测试,测试其正确性。
在pom.xml中,引入JUnit的依赖。
  1. <!--Junit单元测试依赖-->
  2. <dependency>
  3.     <groupId>org.junit.jupiter</groupId>
  4.     <artifactId>junit-jupiter</artifactId>
  5.     <version>5.9.1</version>
  6.     <scope>test</scope>
  7. </dependency>
复制代码
在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。
  1. @Test
  2. public void testGetAge(){
  3.     Integer age = new UserService().getAge("110002200505091218");
  4.     System.out.println(age);
  5. }
复制代码


注意:

  • 测试类的命名规范为:XxxxTest
  • 测试方法的命名规定为:public void xxx(){...}

断言
JUnit提供了一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言
   1.jpg

  1. package com.heima;

  2. import org.junit.jupiter.api.*;
  3. import org.junit.jupiter.params.ParameterizedTest;
  4. import org.junit.jupiter.params.provider.ValueSource;

  5. public class UserServiceTest {
  6.    
  7.     @Test
  8.     public void testGetAge2(){
  9.         Integer age = new UserService().getAge("110002200505091218");
  10.         Assertions.assertNotEquals(18, age, "两个值相等");
  11. //        String s1 = new String("Hello");
  12. //        String s2 = "Hello";
  13. //        Assertions.assertSame(s1, s2, "不是同一个对象引用");
  14.     }

  15.     @Test
  16.     public void testGetGender2(){
  17.         String gender = new UserService().getGender("612429198904201611");
  18.         Assertions.assertEquals("男", gender);
  19.     }
  20. }
复制代码
常见注解
在JUnit中还提供了一些注解,还增强其功能,常见的注解有以下几个:

1.jpg

  1. public class UserServiceTest {

  2.     @BeforeEach
  3.     public void testBefore(){
  4.         System.out.println("before...");
  5.     }

  6.     @AfterEach
  7.     public void testAfter(){
  8.         System.out.println("after...");
  9.     }

  10.     @BeforeAll //该方法必须被static修饰
  11.     public static void testBeforeAll(){
  12.         System.out.println("before all ...");
  13.     }

  14.     @AfterAll //该方法必须被static修饰
  15.     public static void testAfterAll(){
  16.         System.out.println("after all...");
  17.     }

  18.     @Test
  19.     public void testGetAge(){
  20.         Integer age = new UserService().getAge("110002200505091218");
  21.         System.out.println(age);
  22.     }
  23.    
  24.     @Test
  25.     public void testGetGender(){
  26.         String gender = new UserService().getGender("612429198904201611");
  27.         System.out.println(gender);
  28.     }
  29. }   
复制代码
  • 依赖范围
作用范围:
  • 主程序范围有效。(main文件夹范围内)
  • 测试程序范围有效。(test文件夹范围内)
  • 是否参与打包运行。(package指令范围内)

可以在pom.xml中配置 <scope></scope> 属性来控制依赖范围。
1.jpg

网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
微信扫码

网站建设,公众号小程序开发,商城小程序,系统定制开发,App软件开发等

粤ICP备2024252464号

在本版发帖
微信扫码
QQ客服返回顶部
快速回复 返回顶部 返回列表