[JavaSE]单元测试Junit

回到首页

1.介绍

测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

阶段划分:单元测试、集成测试、系统测试、验收测试。

1). 单元测试

  • 介绍:对软件的基本组成单位进行测试,最小测试单位。
  • 目的:检验软件基本组成单位的正确性。
  • 测试人员:开发人员

2). 集成测试

  • 介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。
  • 目的:检查单元之间的协作是否正确。
  • 测试人员:开发人员

3). 系统测试

  • 介绍:对已经集成好的软件系统进行彻底的测试。
  • 目的:验证软件系统的正确性、性能是否满足指定的要求。
  • 测试人员:测试人员

4). 验收测试

  • 介绍:交付测试,是针对用户需求、业务流程进行的正式的测试。
  • 目的:验证软件系统是否满足验收标准。
  • 测试人员:客户/需求方

测试方法:白盒测试、黑盒测试 及 灰盒测试。

1). 白盒测试

清楚软件内部结构、代码逻辑。

用于验证代码、逻辑正确性。

2). 黑盒测试

不清楚软件内部结构、代码逻辑。

用于验证软件的功能、兼容性、验收测试等方面。

3). 灰盒测试

结合了白盒测试和黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)。

2.Junit入门

  • 单元测试:就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试。
  • JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)。

有点:

  1. 测试代码与源代码分开,便于维护。
  2. 可根据需要进行自动化测试。
  3. 可自动分析测试结果,产出测试报告。

使用:

1.在pom.xml​中,引入JUnit的依赖。(或者在一个方法上面加@Test,对其alt+回车添加)

maven方法演示:

<!--Junit单元测试依赖-->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

2.在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。

@Test
public void testGetAge(){
    Integer age = new UserService().getAge("110002200505091218");
    System.out.println(age);
}

3.运行单元测试 (测试通过:绿色;测试失败:红色)。

注意:

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

3.断言

断言方法描述
assertEquals(Object exp, Object act, String msg)检查两个值是否相等,不相等就报错。
assertNotEquals(Object unexp, Object act, String msg)检查两个值是否不相等,相等就报错。
assertNull(Object act, String msg)检查对象是否为null,不为null,就报错。
assertNotNull(Object act, String msg)检查对象是否不为null,为null,就报错。
assertTrue(boolean condition, String msg)检查条件是否为true,不为true,就报错。
assertFalse(boolean condition, String msg)检查条件是否为false,不为false,就报错。
assertSame(Object exp, Object act, String msg)检查两个对象引用是否相等,不相等,就报错。

参数一:预期结果 参数二:实际得出结果 参数三:错误时候提示信息

4.常见注解

注解说明备注
@Test测试类中的方法用它修饰才能成为测试方法,才能启动执行单元测试
@BeforeEach用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。初始化资源(准备工作)
@AfterEach用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。释放资源(清理工作)
@BeforeAll用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。初始化资源(准备工作)
@AfterAll用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。释放资源(清理工作)
@ParameterizedTest参数化测试的注解 (可以让单个测试运行多次,每次运行时仅参数不同)用了该注解,就不需要@Test注解了
@ValueSource参数化测试的参数来源,赋予测试方法参数与参数化测试注解配合使用
@DisplayName指定测试类、测试方法显示的名称 (默认为类名、方法名)

演示 @BeforeEach​,@AfterEach​,@BeforeAll​,@AfterAll​ 注解:

public class demo
{
    @Test
    public void test1(){
        int a=18;
        Assertions.assertEquals(18,a,"通过");
        System.out.println(a);
    }
    @BeforeEach
    public void testBefore(){
        System.out.println("before...");
    }

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

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

    @AfterAll //该方法必须被static修饰
    public static void testAfterAll(){
        System.out.println("after all...");
    }
}
结果:
before...
18
after...
after all...

演示 @ParameterizedTest ​,@ValueSource​ ,@DisplayName​ 注解:

@DisplayName("测试方法1")
@ParameterizedTest(不需要写Test)
@ValueSource(ints = { 17, 18,19})
public void test1(int a){
    Assertions.assertEquals(18,a,"通过");
    System.out.println(a);
}

@ValueSource源码解析
public @interface ValueSource {
    short[] shorts() default {};
    byte[] bytes() default {};
    int[] ints() default {};
    long[] longs() default {};
    float[] floats() default {};
    double[] doubles() default {};
    char[] chars() default {};
    boolean[] booleans() default {};
    String[] strings() default {};
    Class<?>[] classes() default {};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值