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架构的一个实例。顾名思义,它用于对一小块代码进行单元测试

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
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以回答这个问题。Junit是一个Java的单元测试框架。在使用Junit进行单元测试时,我们可以针对被测试的代码编写测试用例,并通过运行这些测试用例来验证代码的正确性。下面是一个简单的Java计算器的Junit测试示例: ``` import org.junit.Test; import static org.junit.Assert.assertEquals; public class CalculatorTest { @Test public void testAdd() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result); } @Test public void testSubtract() { Calculator calculator = new Calculator(); int result = calculator.subtract(5, 2); assertEquals(3, result); } @Test public void testMultiply() { Calculator calculator = new Calculator(); int result = calculator.multiply(4, 3); assertEquals(12, result); } @Test public void testDivide() { Calculator calculator = new Calculator(); int result = calculator.divide(10, 2); assertEquals(5, result); } } ``` 在这个示例中,我们定义了一个Calculator类,并编写了四个测试用例来测试它的add、subtract、multiply和divide方法。每个测试用例都会创建一个Calculator对象,并调用相应的方法来计算结果。然后,我们使用assertEquals方法来断言计算结果是否符合预期值。如果测试用例执行成功,那么Junit会输出绿色的“OK”信息;否则,它会输出红色的错误信息,告诉我们测试失败的原因。 希望这个示例可以帮助你理解如何使用Junit进行Java单元测试。如果你还有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨平生9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值