JAVA入坑之Junit测试与断言

一、软件测试

1.1相关概念

软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

1.2软件测试分类

- 单元 vs 集成测试
- 白盒 vs 黑盒测试
- 自动 vs 手动测试
-回归测试
-压力测试

1.3  单元 与集成测试

1.4 白盒 vs 黑盒测试

1.5自动 vs 手动测试

 1.6回归测试

二、断言

Java断言是一种用于在代码中检查和验证程序员预期的结果的语句,它可以在测试和调试阶段启用,也可以在生产环境中禁用。断言的语法是:

assert condition; // 如果条件为true,继续执行;如果条件为false,抛出AssertionError异常 assert condition : message; // 如果条件为false,抛出AssertionError异常,并附带指定的消息

断言的作用是帮助程序员发现和排除代码中的逻辑错误,提高代码的质量和稳定性。断言不应该用于处理可恢复的错误,而应该用于捕获不可能发生的情况。断言也不应该影响程序的正常逻辑,即使断言被禁用,程序也应该能够正常运行。

package org.example;

public class MainTest {
    public static void main(String[] args) {
        test(-10); // 调用test方法,传入-10作为参数
    }
    public static void test(int age) {
        // assert关键字,再加一个布尔表达式,当表达式结果为false时,程序就会退出
        // 并抛出一个AssertionError,所以断言是error级别的
        assert age >= 0 : "不能输入这种不合理的年龄啊"; // 满足条件则继续运行
        System.out.println("继续执行,输入的年龄是:" + age); // 输出年龄
    }
}

三、Java记录日志

Java记录日志是一种用于在代码中记录和输出程序运行情况的方法,它可以帮助程序员调试、分析、优化和审计系统。Java记录日志的方式有很多种,主要有以下几种:

  • 使用System.out.println()或者System.err.println()方法直接在控制台打印消息。这是最简单的方式,但也是最不推荐的方式,因为它不能控制日志的级别、格式、输出目标等,也不利于日志的管理和维护。
  • 使用java.util.logging包中的日志框架。这是Java自带的日志框架,它提供了Logger、Handler、Formatter、Filter等类来实现日志的记录、输出、格式化和过滤等功能。它支持将日志输出到文件、控制台、网络等不同的目标,也支持定义不同的日志级别和过滤条件。
  • 使用第三方的日志框架,如Log4j、Logback、SLF4J等。这些日志框架都是基于Apache开源社区开发的,它们都比java.util.logging包中的日志框架更加强大和灵活,提供了更多的功能和特性,如异步日志、多线程日志、性能优化、配置文件等。

java.util.logging为例

package org.example;

import java.util.logging.Level;
import java.util.logging.Logger;

public class MainTest1 {
    public static void main(String[] args) {
        Logger logger = Logger.getGlobal();
        logger.setLevel(Level.INFO);
        logger.finest("finest log 777777777"); // 去掉msg:,直接传入字符串参数
        logger.finer("finer log 666666666"); // 同上
        logger.fine("fine log 5555555555"); // 同上
        logger.config("config log 4444444444"); // 同上
        logger.info("info log 33333333"); // 同上
        logger.warning("warning log 222222222"); // 同上
        logger.severe("severe log 1111111111"); // 同上
    }
}

二、 Junit测试

Junit是一个用于Java编程语言的单元测试框架,它在测试驱动开发中起到了重要的作用,它是一个被称为xUnit的单元测试框架家族的一员,它起源于JUnit1。JUnit可以帮助Java开发者编写和运行可重复的测试用例,它是由Erich Gamma和Kent Beck最初开发的,它是xUnit架构的一个实例。顾名思义,它用于对一小块代码进行单元测试

扫描二维码关注公众号,回复: 16808494 查看本文章

2.1@test

配置

  <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

代码 

package org.example;

public class Triangle {
    public boolean judgeEdges(int a, int b, int c) {
        boolean result = true;
        // 边长非负性
        if (a <= 0 || b <= 0 || c <= 0) { // 修正了括号和逻辑运算符的错误
            return false;
        }
        // 两边和大于第三边
        if (a + b <= c || b + c <= a || c + a <= b) { // 修正了数学表达式和逻辑运算符的错误
            result = false;
        }
        return result;
    }
}
package org.example;

import org.junit.Test;

import static org.junit.Assert.*; // 导入Assert类的所有静态方法,自JDK1.5引入
public class TriangleTest {
    @Test
    public void test() {
        assertEquals(true, new Triangle().judgeEdges(3, 8, 5)); // 添加括号和参数,调用judgeEdges方法
        //assertEquals(false, new Triangle().judgeEdges(1, 2, 3)); // 同上,去掉<tex>标签
    }
}

2.2@before

@before是一个Junit 4中的注解,用于标记一个方法,表示在每个测试方法执行之前都要执行这个方法。通常用于做一些测试前的准备工作,如初始化变量,创建对象等。@before注解的方法必须是public void类型,且不能有参数

public class CalculatorTest {

    private Calculator calculator; //声明一个Calculator对象

    @Before //使用@Before注解标记init方法
    public void init() {
        calculator = new Calculator(); //在每个测试方法执行前,创建一个Calculator对象
    }

    @Test //使用@Test注解标记addTest方法
    public void addTest() {
        int result = calculator.add(1, 2); //调用Calculator对象的add方法
        assertEquals(3, result); //断言结果等于3
    }

    @Test //使用@Test注解标记subtractTest方法
    public void subtractTest() {
        int result = calculator.subtract(3, 1); //调用Calculator对象的subtract方法
        assertEquals(2, result); //断言结果等于2
    }
}

 2.3@after

 @after是一个Junit 4中的注解,用于标记一个方法,表示在每个测试方法执行之后都要执行这个方法。通常用于做一些测试后的清理工作,如关闭资源,释放内存等。@after注解的方法必须是public void类型,且不能有参数

public class CalculatorTest {

    private Calculator calculator; //声明一个Calculator对象

    @Before //使用@Before注解标记init方法
    public void init() {
        calculator = new Calculator(); //在每个测试方法执行前,创建一个Calculator对象
    }

    @Test //使用@Test注解标记addTest方法
    public void addTest() {
        int result = calculator.add(1, 2); //调用Calculator对象的add方法
        assertEquals(3, result); //断言结果等于3
    }

    @Test //使用@Test注解标记subtractTest方法
    public void subtractTest() {
        int result = calculator.subtract(3, 1); //调用Calculator对象的subtract方法
        assertEquals(2, result); //断言结果等于2
    }

    @After //使用@After注解标记deleteObject方法
    public void deleteObject() {
        calculator = null; //在每个测试方法执行后,将Calculator对象置为null
    }
}

猜你喜欢

转载自blog.csdn.net/qq_62377885/article/details/132915030