• 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异常,并附带指定的消息

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

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

    三、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为例

    1. package org.example;
    2. import java.util.logging.Level;
    3. import java.util.logging.Logger;
    4. public class MainTest1 {
    5. public static void main(String[] args) {
    6. Logger logger = Logger.getGlobal();
    7. logger.setLevel(Level.INFO);
    8. logger.finest("finest log 777777777"); // 去掉msg:,直接传入字符串参数
    9. logger.finer("finer log 666666666"); // 同上
    10. logger.fine("fine log 5555555555"); // 同上
    11. logger.config("config log 4444444444"); // 同上
    12. logger.info("info log 33333333"); // 同上
    13. logger.warning("warning log 222222222"); // 同上
    14. logger.severe("severe log 1111111111"); // 同上
    15. }
    16. }

    二、 Junit测试

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

    2.1@test

    配置

    1. junit
    2. junit
    3. 4.12

    代码 

    1. package org.example;
    2. public class Triangle {
    3. public boolean judgeEdges(int a, int b, int c) {
    4. boolean result = true;
    5. // 边长非负性
    6. if (a <= 0 || b <= 0 || c <= 0) { // 修正了括号和逻辑运算符的错误
    7. return false;
    8. }
    9. // 两边和大于第三边
    10. if (a + b <= c || b + c <= a || c + a <= b) { // 修正了数学表达式和逻辑运算符的错误
    11. result = false;
    12. }
    13. return result;
    14. }
    15. }
    1. package org.example;
    2. import org.junit.Test;
    3. import static org.junit.Assert.*; // 导入Assert类的所有静态方法,自JDK1.5引入
    4. public class TriangleTest {
    5. @Test
    6. public void test() {
    7. assertEquals(true, new Triangle().judgeEdges(3, 8, 5)); // 添加括号和参数,调用judgeEdges方法
    8. //assertEquals(false, new Triangle().judgeEdges(1, 2, 3)); // 同上,去掉标签
    9. }
    10. }

    2.2@before

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

    1. public class CalculatorTest {
    2. private Calculator calculator; //声明一个Calculator对象
    3. @Before //使用@Before注解标记init方法
    4. public void init() {
    5. calculator = new Calculator(); //在每个测试方法执行前,创建一个Calculator对象
    6. }
    7. @Test //使用@Test注解标记addTest方法
    8. public void addTest() {
    9. int result = calculator.add(1, 2); //调用Calculator对象的add方法
    10. assertEquals(3, result); //断言结果等于3
    11. }
    12. @Test //使用@Test注解标记subtractTest方法
    13. public void subtractTest() {
    14. int result = calculator.subtract(3, 1); //调用Calculator对象的subtract方法
    15. assertEquals(2, result); //断言结果等于2
    16. }
    17. }

     2.3@after

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

    1. public class CalculatorTest {
    2. private Calculator calculator; //声明一个Calculator对象
    3. @Before //使用@Before注解标记init方法
    4. public void init() {
    5. calculator = new Calculator(); //在每个测试方法执行前,创建一个Calculator对象
    6. }
    7. @Test //使用@Test注解标记addTest方法
    8. public void addTest() {
    9. int result = calculator.add(1, 2); //调用Calculator对象的add方法
    10. assertEquals(3, result); //断言结果等于3
    11. }
    12. @Test //使用@Test注解标记subtractTest方法
    13. public void subtractTest() {
    14. int result = calculator.subtract(3, 1); //调用Calculator对象的subtract方法
    15. assertEquals(2, result); //断言结果等于2
    16. }
    17. @After //使用@After注解标记deleteObject方法
    18. public void deleteObject() {
    19. calculator = null; //在每个测试方法执行后,将Calculator对象置为null
    20. }
    21. }

     

  • 相关阅读:
    Kubernetes客户端认证(二)—— 基于ServiceAccount的JWTToken认证
    C/C++|基于回调函数实现异步操作
    【liunx】进程的状态
    比特币成长的代价
    RabbitMq如何做到消息的可靠性投递?
    nginx常用指令、方向代理、负载均衡、动静分离、高可用实例
    Windows下使用图形化的Havoc C2
    【spring源码系列】之【FactoryBean类型的接口】
    C语言实现输入一行字符统计其中有多少个单词,单词之间用空格分隔开
    (附源码)app智能车APP 毕业设计 250623
  • 原文地址:https://blog.csdn.net/qq_62377885/article/details/132915030