首页 > 其他分享 >通义灵码加持的单元测试实践

通义灵码加持的单元测试实践

时间:2024-10-01 08:50:02浏览次数:9  
标签:加持 测试 代码 单元测试 生成 单测 灵码

本文首先讲述了什么是单元测试、单元测试的价值、一个好的单元测试所具备的原则,进而引入如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试的。

什么是单元测试?

单元测试是一种软件测试方法,通过编写代码来验证应用程序中最小的可测试单元(如单个函数、方法或类)的正确性。通常,单元测试由开发人员在功能实现过程中或完成后编写,其目的是确保每个最小可测试单元都能按照设计预期正常工作。

单元测试的价值

单元测试的价值主要体现在提高软件质量和可靠性,‌确保代码在修改或重构后仍然能够正常运行。‌单元测试的优势包括:

  • 提高代码质量:‌通过发现代码中的错误和漏洞,‌从而提高代码的质量和可靠性。‌

  • 提高开发效率:‌在开发过程中及时发现问题,‌减少开发周期和成本。‌

  • 便于重构和维护:‌确保代码在重构和维护过程中不会出现新的错误和漏洞。‌

  • 有助于团队协作:‌作为团队成员之间的沟通和协作工具,‌提高团队的协作效率和质量。‌

此外,‌单元测试还可以让软件故障尽早被发现,‌避免故障遗留到后期由于定位修复难度带来的更大损失。‌它的可回归性为软件提供了一层安全防护网,‌为软件后续的重构和修改提供了安全保障。‌单元测试还为软件单元如何被使用提供了天然的代码样例使用手册。

遵循的原则

好的单元测试就像空气(AIR)一样感觉不到,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化(A)、独立性(I)、可重复执行(R)的特点。

  • A: Automatic(自动化):单元测试应能被自动化执行,以便在代码更改时快速确认新加入的代码没有破坏已有功能,通常情况下会将单测接入到持续集成中,每当代码有变更时都会通过持续集成自动触发单元测试。

  • I: Independent(独立性):每个单元测试应当是独立的,不能依赖于其他测试的执行顺序或结果。这也要求单测的测试颗粒度必须足够小,只有这样才能满足独立性。

  • R: Repeatable(可重复执行):好的单元测试在同样的条件下,每次运行应当给出相同的结果。它不应依赖于外部因素(如网络、数据库或文件系统),需要对这些外部的依赖进行正确的mock 。

除此之外,好的单测还必须要满足有明确的断言,执行速度快,边界测试充分,覆盖率高等特点。只有满足这些条件的单测才是好的单测,好的单元测试是对代码质量保障至关重要的一环。

如何编写单元测试?

下面以Java语言为例来介绍如何编写单元测试,总体遵循以下几个步骤:

拆分详细的测试用例

考虑分支条件

寻找边界条件

在编写单元测试时,需要考虑代码中的所有分支。分支包括if、else、switch语句等,每个分支都需要单独测试。例如:

public String classifyNumber(int number) {
    if (number < 0) {
        return "negative";
    } else if (number == 0) {
        return "zero";
    } else {
        return "positive";
    }
}

在上述代码中,有三个分支需要测试:

  • number<0。

  • number==0。

  • number>0。

针对每个分支,都需要编写一个测试用例。

制定统一的单测规范

命名规范

存放路径

单元测试类通常采用 类名Test的形式。例如,如果要测试一个Calculator类,则单元测试类可以命名为CalculatorTest。单元测试方法的命名应当描述具体要测试的内容。例如:

public class CalculatorTest {
    @Test
    public void testAddition() {
        // 测试内容
    }
    @Test
    public void testSubtraction() {
        // 测试内容
    }
}

选择合适的单测框架

Java 常用的单元测试框架有JUnit和Mockito,下面将围绕如何使用这两种框架编写基本的单元测试:

JUnit 测试框架

Mockito 测试框架

JUnit是Java语言中最著名的单元测试框架。它简洁易用,提供了丰富的注解和断言。

  1. 添加JUnit依赖(以Maven为例):

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  2. 编写单元测试:

    import org.junit.Test;
    import static org.junit.Assert.*;
    
    public class CalculatorTest {
        @Test
        public void testAddition() {
            Calculator calculator = new Calculator();
            assertEquals(5, calculator.add(2, 3));
        }
    }

如何使用通义灵码快速生成单测

在大多数开发者的编程习惯中,通常采用Test Later的方法进行单元测试,即首先编写好代码,然后再为代码编写相应的单元测试。在此背景下,利用通义灵码生成单元测试显得尤为便捷。以下列举几种使用通义灵码生成单元测试的方式。

手工选中代码方式生成

在 IDE 编辑区中,通过通义灵码选中某段代码来生成单测,选中代码后,在灵码的问答框内,通过 /generate unit test来生成与选中的代码对应的单元测试。

整屏示例@1x (5)

说明

使用/generate unit test这个命令时,可以在输入框追加更多的信息,来生成更符合开发者需要的测试用例,如需要支持JUnit5或采用Mockito进行Mock,就可以采用 /generate unit testJUnit5Mockito这样的方式,后面两个关键词被当作前面命令的参数,这样的使用方式,同样适用于其他命令。

使用快捷按钮方式生成

通义灵码插件在每个方法签名的上面都会有一个小图标,单击图标后会弹出相应的命令菜单,选择生成单元测试。

整屏示例@1x (7)

也可以选择要生成的代码块,然后单击右键来选择生成单元测试功能。

整屏示例@1x (9)

采纳单元测试

单测代码生成完毕后,在问答区的代码块右上角,会有三个选项,分别是插入代码,复制和新建文件:

  • 插入代码:会将当前生成的单测代码插入到当前打开的文件中。

  • 复制:即复制代码块的代码,由用户自行选择将代码复制到哪个文件中。

  • 新建文件:会按照Java单测的规范,新生成一个单测类文件,放到指定的目录中(对应单测方法文件所在的test目录下),如果已经存在同名的单测文件,需要用户自主确认是否覆盖原文件。

整屏示例@1x (10)

单测生成追问

如果您对当前生成的单测代码不满意(需要使用特定的单测框架或者生成更多的单测方法),只需在问答区中的输入框输入相应的文本进行追问即可,或者也可以单击预置的单测追问Tag,如示例中追问的Tag :RetryUse MockitoUse Spring TestExplain code,进行追问,直到生成您满意的单测代码为止。

整屏示例@1x (11)

说明

一般根据代码生成的单元测试,会枚举常用的测试用例,并不会遍历所有的用例。如果您觉得生成的用例不足,建议先采纳当前生成的几个用例,放到测试文件当中。然后,切换到测试文件中,采用代码续写的方式,通义灵码会帮助您续写新的测试用例。

结语

单元测试是重要的编程实践,为编码过程搭建质量围栏。同时,采用测试驱动开发实践中的Test First ,能够显著推动代码设计的演变。通义灵码,可以极大降低单元测试框架的搭建和测试用例编写的工作量。同时,使用通义灵码对单元测试用例保鲜,可以显著提升编码质量。

标签:加持,测试,代码,单元测试,生成,单测,灵码
From: https://blog.csdn.net/segwy/article/details/142567110

相关文章

  • 用通义灵码维护遗留代码的正确姿势
    本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。什么是遗留代码与过时技术相关的代码:与不再受支持的操作系统或软件库相关的代码。依赖于已淘汰的......
  • mock数据,不使用springboot的单元测试
    业务代码packagecom.haier.configure.service.impl;importcom.baomidou.mybatisplus.core.toolkit.Wrappers;importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importcom.haier.common.util.RequestUtil;importcom.haier.configure.entity.Langu......
  • Python中的单元测试:提高代码质量和可靠性
    在软件开发过程中,确保代码的质量和可靠性是非常重要的。单元测试是一种有效的手段,它通过验证代码的各个部分是否按预期工作,帮助开发者发现和修复潜在的问题。Python提供了unittest模块,这是一个内置的单元测试框架,可以帮助你轻松地编写和运行单元测试。本文将详细介绍如......
  • 在Bamboo上怎么使用iOS的单元测试
    本教程将使用北汽登录模块为例,一步一步和大家一起搭建单元测试用例,并在Bamboo上跑起来,最终测试结果和代码覆盖率会Bamboo上汇总。模块名称:BQLoginModule,是通过iBiu创建的一个模块工程一建立单元测试BundleProductName:BQLoginTests二测试代码编写1配置文件同步如果我们要在测......
  • 在Bamboo上怎么使用iOS的单元测试
                sed"s/${moduleName}/Example/${moduleName}/${moduleName}/Classes/g"./cov_env1.txt>cov_env2.txt  cp-f./Pods/XcodeCoverage/env.sh./Pods/XcodeCoverage/env_bak.sh  rm-f./Pods/XcodeCoverage/env.s......
  • Junit单元测试实例
    1.在IDEA中打开File->New->Project。  2.在左侧的菜单栏中选择Java,Name是项目名称,Location是项目的位置,JDK根据个人项目的情况选择。  3.下载对应的Mockito插件,我下载的插件是MockitoPostfixCompletion。 4.配置Maven设置 5.选中项目......
  • 资金进阶司库|司库创新场景之AI加持下的司库新应用
    连载导语司库体系建设是企业实现财务数字化转型和资金管理现代化的重要手段,是企业实现战略转型和高质量发展的关键支撑,也是企业应对复杂多变的全球经济环境和风险挑战的重要保障。司库承担着组织中的领导和战略引导作用,越来越多的企业以司库建设为抓手,加快推进自身财务数智......
  • RAG、单元测试等一大波新功能,上线JetBrains IDEs的CodeGeeX插件!
    CodeGeeX第三代模型发布后,多项基于第三代模型能力的新功能今天也同步上线JetBrainsIDEs全家桶。用户可以在IDEA、PyCharm等JetBrains系的IDE中,搜索下载CodeGeeXv2.5.0版本,深度使用最新功能。 一、新模型加持的代码补全和智能问答 以IDEA为例,在v2.5.0版本的CodeGeeX插件中,用户可......
  • TestNG进行单元测试
    1.确定测试目标在白盒测试中,目标是测试代码的内部结构、逻辑路径、分支等。你需要明确哪些类和方法是需要测试的,并决定哪些逻辑路径是关键的。2.编写单元测试单元测试是白盒测试的一种常见形式。在编写TestNG测试时,你可以直接调用方法并检查它们的行为。测试用例应该覆盖代......
  • 期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
    在AI程序员的帮助下,一个几乎没有专业编程经验的初中生,在人头攒动的展台上从零开始,两分钟就做出了一个倒计时网页。他需要做的,只是输入包含几句话的提示词。数秒钟后,大模型就生成了代码,还列出了环境需求,复制完代码就可以使用了。这不是程序员父亲带自家小孩做的网红项目,而是人人都......