关于kunit的二点够用就行知识概念

news2024/11/16 13:34:25

前面我们写过一篇关于Kunit怎么快速使用起来的文章,但是当时只是搭建了框架,让整个KUNIT跑起来了。使用到的关于KUNIT中的东西还是比较的少。现在这次我们去测试一些复杂的场景,使用到一些复杂的断言。继续我们的二点点KUNIT,学习一下KUNIT中的东西。

1、测试用例

在KUNIT中最基本的单元就是测试用例,一个测试用例就是一个函数:void (*)(struct kunit *test)。在这个函数下面调用了需要测试的接口。比如:

void example_test_success(struct kunit *test)
{
}

void example_test_failure(struct kunit *test)
{
        KUNIT_FAIL(test, "This test never passes.");
}

在上面的代码中,example_test_success 始终会通过,因为这个函数实际上什么都没做。而下面的example_test_failure始终会失败,因为这个调用了KUNIT_FAIL这个特殊的断言,这个会打印失败信息,并让这个用例测试不通过。

2、期望-KUNIT_EXPECT_EQ

这个期望就是指我们期望一段代码的运行结果应该是什么样子的。这个期望被称为函数。测试是通过设置对被测试代码行为的期望来进行的。

当一个或多个预期失败时,测试函数的结果与我期望的不相符合的时候,测试用例失败,并记录有关失败的信息。例如:

void add_test_basic(struct kunit *test)
{
        KUNIT_EXPECT_EQ(test, 1, add(1, 0));
        KUNIT_EXPECT_EQ(test, 2, add(1, 1));
}

在上面的示例中,add_test_basic对一个名为add的函数的行为进行了许多断言。第一个参数始终是struct kunit*类型其中包含有关当前测试上下文的信息。

在本例中,第二个参数是期望的值。最后一个值是实际值。如果add通过了所有这些期望,测试用例add_test_basic将通过;如果这些期望中的任何一个失败,测试用例将失败。

当违反任何期望时,测试用例失败;然而,测试将继续运行,并尝试其他预期,直到测试用例结束或终止。这与稍后讨论的断言相反。

在这里插入图片描述
例如,如果我们想要严格测试上面的add函数,请创建额外的测试用例,测试add函数应该具有的每个属性,如下所示:

{
        KUNIT_EXPECT_EQ(test, 1, add(1, 0));
        KUNIT_EXPECT_EQ(test, 2, add(1, 1));
}

void add_test_negative(struct kunit *test)
{
        KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
}

void add_test_max(struct kunit *test)
{
        KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
        KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
}

void add_test_overflow(struct kunit *test)
{
        KUNIT_EXPECT_EQ(test, INT_MIN, add(INT_MAX, 1));
}

就是要让测试用例越简单越好。

3、断言-Assertions

断言类似于预期,只是如果条件不满足,断言会立即终止测试用例。例如:

static void test_sort(struct kunit *test)
{
        int *a, i, r = 1;
        a = kunit_kmalloc_array(test, TEST_LEN, sizeof(*a), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a);
        for (i = 0; i < TEST_LEN; i++) {
                r = (r * 725861) % 6599;
                a[i] = r;
        }
        sort(a, TEST_LEN, sizeof(*a), cmpint, NULL);
        for (i = 0; i < TEST_LEN-1; i++)
                KUNIT_EXPECT_LE(test, a[i], a[i + 1]);
}

在这个例子中,被测试的方法应该返回一个值的指针。如果指针返回null或errno,我们希望停止测试,因为以下预期可能会导致测试用例崩溃。**ASSERT_NOT_ERR_OR_NULL(…)**允许我们在不满足完成测试的适当条件时退出测试用例。(见名知意)

4、测试套件

我们需要很多测试用例来覆盖单元的所有行为。有很多类似的测试是很常见的。为了减少这些密切相关的测试中的重复,大多数单元测试框架(包括KUnit)都提供了测试套件的概念

测试套件是一个代码单元的测试用例集合,具有可选的设置和拆卸功能,在整个套件和/或每个测试用例之前/之后运行。例如:

static struct kunit_case example_test_cases[] = {
        KUNIT_CASE(example_test_foo),
        KUNIT_CASE(example_test_bar),
        KUNIT_CASE(example_test_baz),
        {}
};

static struct kunit_suite example_test_suite = {
        .name = "example",
        .init = example_test_init,
        .exit = example_test_exit,
        .suite_init = example_suite_init,
        .suite_exit = example_suite_exit,
        .test_cases = example_test_cases,
};
kunit_test_suite(example_test_suite);

在上面的示例中,测试套件example_test_suite将首先运行example_suite_init,然后运行测试用例example_test_foo、example_test_bar和example_test_baz。每个函数都会在其前面立即调用example_test_init并在其后面立即调用example_test_exit。最后,example_suite_exit将在所有其他操作之后调用。kunit_test_suite(example_test_ssuite)向kunit测试框架注册测试套件。

这个就是通过这个测试套件,将一些需要初始化和退出的测试用例,给准备了环境。

在这里插入图片描述
测试用例只有在与测试套件关联时才会运行。kunit_test_suite(…)是一个宏,它告诉链接器将指定的测试套件放在一个特殊的链接器部分中,以便kunit可以在late_init之后运行,或者在加载测试模块时运行(如果测试是作为模块构建的)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络的类型分类和结构理解

一、序言 神经网络是模仿动物神经网络行为特征&#xff0c;进行分布式并行信息处理的算法数学模型。 在深度学习领域&#xff0c;神经网络就是我们深度学习的灵魂&#xff0c;如果我们想依靠算法实现一些功能&#xff0c;就必须依托不同的神经网络结构&#xff0c;所以很有必…

WPF 3D 使用3D Tools简单实现鼠标控制模型

CSDN上下载一个资源&#xff0c; 3D模型导入wpf_wpf加载obj模型光线和相机配置-C#代码类资源-CSDN下载 从VS中打开&#xff0c;运行如下&#xff1b; 出来一个模型&#xff1b; 可以用鼠标旋转&#xff0c;翻转模型&#xff0c;从不同角度方位查看模型&#xff1b; 项目结构…

python-(6-4-4)爬虫---bs解析案例---爬取图片

文章目录一 需求二 操作思路1 拿到主页面的源代码&#xff0c;提取链接地址href2 通过href拿到子页面的内容&#xff0c;并找到图片下载地址 img ---> src3 下载图片三 分析步骤1 拿到主页面的源代码&#xff0c;提取链接地址href2 通过href拿到子页面的内容&#xff0c;并找…

sketch基础教程大全,对象、图层、画板常见技巧

sketch对象、图层、画板的使用技巧 1.通过快捷键调整图形的形状 选择图形&#xff0c;按住Command按键&#xff0c;然后通过上、下、左、右方向键按1像素调整图形形状。同时按住按钮。CommandShift方向键&#xff0c;可调整方向键。 ​2.复制元素 选择一个元素&#xff0c;按…

计算机毕业设计——基于Android的真人社交游戏辅助应用开发

编号 本科生毕业设计&#xff08;论文&#xff09; 题目&#xff1a; 真人社交游戏辅助应用开发 专业 学 号 学生姓名 指导教师 摘 要 时至今日&#xff0c;社交已成为人们生活中必不可少的一部分&#xff0c;社交网络的盛行已经成为一种必然趋势&#xff0e;与此同时&a…

语音识别之Kaldi学习GMM-HMM

语音识别之Kaldi kaldi语音识别理论与实践课程学习。 前面的博客介绍了语音识别的基础知识及原理。现在开始学习实战。以Kaldi框架为基础。 Kaldi是一个有全套的语音识别代码的工具&#xff0c;由Dan Povey博士和捷克的BUT大学联合开发&#xff0c;最早发布于2011年&#xf…

文献检索工具 | 计算机类英文文献检索数据库DBLP

文章目录1.什么是DBLP&#xff1f;2.DBLP文献检索的3种方式2.1.检索指定会议/期刊的论文2.2.检索指定作者的论文2.3.检索指定题目的论文3.Tips:DBLP中各个颜色模块含义1.什么是DBLP&#xff1f; 定义&#xff1a; DBLP&#xff08;DataBase systems and Logic Programming&…

JS 数组去重的多种方法

1. 前言 2. 普通方法数组去重 3. filter indexOf 4. ES6 的 new Set() 5. 需要注意的问题 1. 前言 本文提供两个数组变量供测试使用 const array [html, css, js, css]const resArr [html, css, css, [1], [1]]2. 普通方法数组去重 下面列举几种数组去重的方法思路都一…

JavaScript大作业 制作简单的程序员个人博客网站(web前端网页制作课作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

花钱去IT培训班学习几个月软件测试真的值得吗?

为什么网上一问去IT培训机构报班学软件测试&#xff0c;一大堆人就会跳出来说不建议、劝退、建议自学&#xff1f; 为什么IT培训机构那么多坑&#xff0c;还有那么多学生愿意花几万块钱去学软件测试&#xff1f; 有人说&#xff1a;网上那么多的视频资料&#xff0c;很多都是…

五、输入输出管理(二)I/O管理概述

目录 2.1 I/O 软件层次结构 2.1.1用户层 I/O 软件 2.1.2设备独立软件 2.1.3设备驱动程序 2.2应用程序与I/O接口 2.2.1字符设备接口 2.2.2块设备接口 2.2.3网络设备接口 2.2.4阻塞/非阻塞 I/O I/O系统概述、I/O接口、I/O控制的四种方式&#xff08;程序直接控制方式、程…

Trimble Tekla Structures支持14种不同的语言

Trimble Tekla Structures支持14种不同的语言 Tekla Structures被称为前Xsteel&#xff0c;是Trimble Software的产品&#xff0c;Trimble软件是一种强大的BIM机器。该软件为用户提供的环境&#xff0c;用户可以绘制接下来的三个模型并从中提取接下来的两个模型。该软件制作的模…

linux下pycharm运行错误解决办法

错误1&#xff1a; Inspection info&#xff1a;this inspection detects names that should resolve but dont.due to dynamic dispatch 重新设置虚拟环境即可&#xff0c;前面几篇文章有如何配置虚拟环境的教程 错误2&#xff1a; 有时候即使我们配好环境后在代码中也会出…

【玩转c++】c++内存管理 new/delete

本期主题&#xff1a;c/c内存管理。 博客主页&#xff1a;小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐身为程序员 &#xff0c;不会有人没有女朋友吧。 目录 &#x1f341;1. 了解c/c内存区域划分 &#x1f341;2.…

hbuilderx升级3.6.5版本后运行到手机端同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示

问题1&#xff1a; hbuilderx升级3.6.5版本后运行到手机端同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示。 解决问题指路。 https://uniapp.dcloud.net.cn/tutorial/run/run-app-faq.html#node https://un…

在线考试系统毕业设计,线上考试系统设计与实现,毕业设计论文源码开题报告需求分析

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个在线考试的java系统&#xff0c;整体使用了基于浏览器的B/S架构&#xff0c;技术上使用了基于java的springboot框架&#xff1b;使用浏览器&#xff0c;通过后台添加考试题目&#xff0c;学生通过浏览器登录…

一文解决网络系统调用接口到内核的请求

网络套接字入口函数 //所有的网络套接字系统调用函数&#xff08;socket bind listen connect &#xff09;都使用一个共同的入口函数&#xff1a;sys_socketcall /* 第一个参数call表示被调用的应用层接口函数&#xff0c;第二个参数是一个指针&#xff0c;指向具体被调用函数…

【综合案例】原生JS实现购物商城

目录一、案例说明1、目录结构2、conf文件夹3、用户名密码的正则和ajax的封装二、登录页的实现1、案例效果2、登录页逻辑3、接口文档4、代码实现5、返回信息显示三、首页的实现1、案例效果2、首页的逻辑3、接口文档4、代码实现5、返回信息显示四、个人中心1、案例效果2、个人页的…

springboot车辆管理系统的设计与实现毕业设计源码031034

车辆管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&…

Runtime源码解析-alloc

Runtime源码解析-alloc 前言alloc 通过汇编查看调用流程1. objc_alloc方法2. callAlloc方法 首次进入非首次进入LLVM优化 3. _objc_rootAllocWithZone方法4. _class_createInstanceFromZone方法 instanceSize&#xff1a;计算内存大小 fastInstanceSizealignedInstanceSize mal…