JAVA复习(进阶三)

JUnit

JUnit 是一个用于 Java 编程语言的单元测试框架,广泛用于开发和测试 Java 应用程序。它允许开发者编写和运行重复的测试,以确保代码质量和功能正确性。

概念

  • 测试 test:发现问题;

  • 调试 debug:解决问题;

  • 单元测试:测试小的代码单元(如方法)以验证其是否按预期工作。
    测试用例:由一个或多个断言组成的测试代码,用于验证某个功能的正确性。
    测试套件:一个组合多个测试用例的集合,可以一起运行。

JUnit 3(4/5) 注解

  • @Before: 被@Before修饰的方法,在每个测试方法运行前,均执行一次;

  • @After:被@After修饰的方法,在每个测试方法运行完毕后,均执行一次;

    1.@Before和@After可以出现多次; 2.经这两个注释的初始化和注销,可以保证各个测试之间的独立性而互不干扰,他的缺点是效率低。

  • @BeforeClass:所有测试开始之前运行

  • @AfterClass :所有测试结束之后运行

  • @Test:被注解的方法是测试方法

    • @Test(expected=*.class) 通过传入异常类后,测试类如果没有抛出异常或者抛出一个不同的异常,本测试方法就将失败。

    • @Test(timeout=xxx) 如果测试方法在制定的时间(毫秒)之内没有运行完,则测试失败。

  • @ignore: 该元数据标记的测试方法在测试中会被忽略。

测试类

  • 测试类是一个独立的类,没有任何父类。测试类的名字可以任意命名。所以我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部方法的声明。

  • 测试类中,并不是每一个方法都是用于测试的,你必须使用“注解”来明确表明哪些是测试方法。

  • 测试方法的名字可以随便取,没有限制,但是返回值必须为void,而且不能有任何参数。

JUnit 基本用法

1. 添加依赖

在 Maven 项目中,可以通过以下依赖添加 JUnit:

2. 创建测试类

创建一个测试类,使用 @Test 注解标记测试方法:

3. 断言

JUnit 提供了多种断言方法来验证结果:

  • assertEquals(expected, actual)
  • assertTrue(condition)
  • assertFalse(condition)
  • assertThrows(exceptionClass, executable)
4. 使用生命周期方法

可以使用注解 @BeforeEach@AfterEach 来定义在每个测试方法前后执行的代码:

5. 测试异常

如果希望测试某个方法抛出特定异常,可以使用 assertThrows 方法

Lambda

函数式接口

抽象方法仅有一个的接口,被称作函数式接口。函数式接口中非抽象方法(默认方法、静态方法)个数不限。JDK8 新增了 @FunctionalInterface 注解表示函数式接口。

@FunctionalInterface
public interface MathOperation {
    double operate(int a, int b);
}
​
@FunctionalInterface
public interface Runnable {
    void run();
}
  • JDK8 提供的 java.util.funciton包,其中的接口都为 函数式接口。

  • 四大函数式接口:

    函数式接口接口中定义的唯一抽象方法含义
    Consumervoid accept(T t)有输入参数,无返回值,称为消费型接口。
    SupplierT get()无输入参数,有返回值,称为供给型接口。
    Function<T, R>R apply(T t)有输入参数,有返回值,称为函数型接口。
    Predicateboolean test(T t);对输入进行断言,并将断言的结果以布尔形式返回,称为断言型接口。

Lambda 表达式

Lambda表达式是 JDK8 中提供的一个新特性,是一个匿名方法 ,而匿名方法是由参数列表和方法体两部分组成的,Lambda 表达式也必须包含这两部分:(参数列表) -> { 方法体 }

函数式接口  变量名 = (参数1,参数2,...) -> { 方法体 }
  1. (参数1,参数2…)表示参数列表;->表示连接符;{}内部是方法体

  2. = 右边的对象类型会根据左边的函数式接口类型自动推断;

  3. 参数只有一个时,括号()可省;无参或多参时都不可省。

  4. 形参列表的数据类型会自动推断,因此参数类型的声明是可选的;

  5. 函数体如果只有一条语句,花括号和return语句都可省;反之则不能省,且花括号后需有分号;

  6. lambda表达式 只能引用 final域外变量,被引用的域外变量即使没有被final修饰,也隐性的具有 final语义

方法引用

简化 Lambda 表达式。常见方法引用五种类型:

方法引用的类型示例
引用静态方法类名 :: 静态方法名
引用某个对象的实例方法对象名 :: 非静态方法
引用类中的实例方法类名 :: 非静态方法
引用构造方法类名:: new
引用数组元素类型[] :: new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值