【Java】Junit的使用

Java系列文章目录

补充内容 Windows通过SSH连接Linux
第一章 Linux基本命令的学习与Linux历史


一、前言

  • 学习测试Junit
  • Mock后面补充

二、学习内容:

  • 测试的方法与条件

三、问题描述

  • 对简单逻辑代码的测试

四、解决方案:

4.1 Junit测试方法的使用

  • 写一个简单的加法但是里面实际上是乘法

🌟 Junit适合测试简单的没有依赖的类

package org.example;

public class SimpleExample {
    public int add (int numberA,int numberB)
    {
        return numberA * numberB;
    }
}
  • 测试类的测试用例加上注解@Test

🌟 其他注解后续补充这个比较重要先记录

使用断言来进行测试

package org.example;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;
//        assertNotEquals(5,simpleExample.add(2,2));
//        assertTrue(4==simpleExample.add(2,2));
//        assertFalse(5==simpleExample.add(2,2));
//        assertNotNull(simpleExample);
//        assertNull(simpleExample.add(2,2));
//        assertSame(simpleExample.add(2,2),simpleExample.add(2,2));
//        assertNotSame(simpleExample.add(2,2),simpleExample.add(2,2));

class SimpleExampleTest {
    @Test
    void twoPlusTwoShouldEqualFour()
    {
        SimpleExample simpleExample = new SimpleExample();
        assertEquals(4,simpleExample.add(2,2));

    }

    @Test
    void threePlusSevenShouldEqualTen()
    {
        SimpleExample simpleExample = new SimpleExample();
        assertEquals(10,simpleExample.add(3,7));
    }

}
  • 遇到异常会出现如下情况

在这里插入图片描述

4.2 测试规范

🌟 独立性:确保测试方法之间相互独立,不依赖外部状态。
🌟 粒度控制:每个测试方法测试一个特定功能。

每个方法都测试一小部分功能:

package org.example;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class GraderTest {

    @Test
    void testGradeA() {
        Grader grader = new Grader();
        char letterGrade = grader.determineLetterGrade(100);
        assertEquals('A', letterGrade);
    }
    @Test
    void testGradeB() {
        Grader grader = new Grader();
        char letterGrade = grader.determineLetterGrade(80);
        assertEquals('B', letterGrade);
    }
    @Test
    void testGradeC() {
        Grader grader = new Grader();
        char letterGrade = grader.determineLetterGrade(70);
        assertEquals('C', letterGrade);
    }
    @Test
    void testGradeD() {
        Grader grader = new Grader();
        char letterGrade = grader.determineLetterGrade(60);
        assertEquals('D', letterGrade);
    }
    @Test
    void testGradeF() {
        Grader grader = new Grader();
        char letterGrade = grader.determineLetterGrade(50);
        assertEquals('F', letterGrade);
    }
    @Test
    void testGradeOutOfRange() {
        Grader grader = new Grader();
        //如果抛出异常就是对的
        System.out.println(assertThrows(IllegalArgumentException.class, () -> grader.determineLetterGrade(-1)));
    }
}
  • 写一个简单的分数判断逻辑

🌟 每个测试方法测试一个特定功能。我们可以把下面代码的else去掉

package org.example;

public class Grader {
    public char determineLetterGrade(int numberGrade) {
        if (numberGrade < 0 || numberGrade > 100) {
            throw new IllegalArgumentException("Grade not in range");
        } else if (numberGrade >= 90) {
            return 'A';
        } else if (numberGrade >= 80) {
            return 'B';
        } else if (numberGrade >= 70) {
            return 'C';
        } else if (numberGrade >= 60) {
            return 'D';
        } else {
            return 'F';
        }
    }
}

五、总结

  • 命名规范:使用清晰且具有描述性的类名和方法名。
  • 注解使用:合理使用 @Test、@Before、@After 等注解。
  • 断言:用适当的断言方法(如 assertEquals())验证预期结果。
  • 异常测试:有效捕获和验证异常。
  • 独立性:确保测试方法之间相互独立,不依赖外部状态。
  • 粒度控制:每个测试方法测试一个特定功能。
  • 可读性:代码应清晰简洁,易于维护。
  • 合理依赖:使用 Mock 进行依赖替换以简化测试。
  • 持续集成:定期运行测试,确保修改后功能正常。

(后续有遇到问题再添加)


声明:如本内容中存在错误或不准确之处,欢迎指正。转载时请注明原作者信息(麻辣香蝈蝈)。

在这里插入图片描述

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值