Junit FAQ(001-016)

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情
如果是初次接触Junit,你或许有一大堆的疑问,这里根据网上的资料整理出了一些可以用来解除你的疑惑的问题列表,我想对你是有用的:

【001】没有人希望查看别人是如何设计测试类的。如果每个人都有不同的设计测试类的方法,光维护被测试的类就够烦了,谁还顾得上维护测试类?

Junit是一个回归测试框架,所谓框架就是他的作者Erich Gamma 和 K ent Beck 定下了一些条条框框,你编写的测试代码必须遵循这个条条框框:继承某个类,实现某个接口。其实也就是我们前面所说的规范。好在JUnit目前得到了大多数软件工程师的认可。遵循JUnit我们会得到很多的支持。如果没有一定的规范,测试类的编写将会成为另一个需要定义的标准。

【002】另外有一点我不想提,但是这个问题太明显了,测试类的代码多于被测试的类!这是否意味这双倍的工作?

不!1)不论被测试类的方法如何复杂,测试代码中的类的方法只会保持一样的代码量。2)提高软件的质量并解决软件熵这一问题并不是没有代价的。测试代码中的类就是代价。我们目前所能做的就是尽量降低所付出的代价:我们编写的测试代码要能被维护人员容易的读取,我们编写测试代码要有一定的规范。

【003】什么是软件熵?

有一个聪明人提出了软件熵(software entropy)的概念:一个程序从设计很好的状态开始,随着新的功能不断地加入,程序逐渐地失去了原有的结构,最终变成了一团乱麻。

【004】怎么样编写的测试代码才能真正发现问题?

要注意编写一定能通过的测试代码(如以前举的例子)并没有任何意义,只有测试代码能帮助我们发现bug,测试代码才有其价值。此外测试代码还应该对工作代码进行全面的测试。如给方法调用的参数传入空值、错误值和正确的值,看看方法的行为是否如你所期望的那样。可以在网上搜索别人总结的一些经验。

【005】什么是断言?

断言是一个布尔语句,该语句不能为假,如果为假,则表明出现了一个bug。我是在使用Jmeter时知道这个词语的,当时还纳闷这个词什么意思?使用Rational或MI公司自动化测试工具的人一定知道其中的一个术语“检查点”(或称为验证点),我们可以把断言理解为检查点或验证点。

注:以下006-013摘自人民邮电出版社出版王东刚编著的《软件测试与Junit实践》一书,该书最大的特点在于“学以致用”,是作者经验的积累,推荐阅读。

【006】白盒测试用例应该怎么写?

不管哪种测试用例,都不可避免地再内容中涉及到三类数据:正常数据、边界值和错误数据。由于执行测试用例的数量巨大以及还要进行回归测试,所以必须使用自动化测试工具,但提取测试数据仍要依靠编写测试用例人员的经验。

【007】类测试和传统单元测试有什么区别?

类测试和传统测试略有不同,这是由于类的构造和其实现方式的特殊性造成的,所以对类的测试更为复杂。传统单元测试注重单元之间的接口测试,也就是说每个单元都有自己的输入输出接口,在调用中如果出现了严重错误,那么这些错误也事因为单元之间接口的实现引发的,和单元本身并没有什么直接关系。

而在面向对象的世界里,每一个类就是一组最小的交互单元,其内部封装了各种属性和消息传递方式。类被实例化后产生了对象,每个对象都有相对的声明周期和活动范围,在这个范围内,类测试除了测试类中包含的类方法,还要测试类的状态,这是传统单元测试所没有的。

【008】类的测试用例需要注意什么?

类的测试用例需要确保类实例完全满足类的设计描述,对某个类进行测试除了要确保它能实现预定的设计外,还要关注这个类和其它类之间的特殊关系(可能是关联、是实现或者是依赖于等),如果类的测试用例只能覆盖优先的实现单元,则降低了整个测试用例的有效执行过程,或者需要投入更多的资源制作更多的测试用例来测试类,后期的测绘用例维护也是非常困难的。

【009】类的测试过程是怎么样的?

测试驱动驱动盖该类的测试用例,根据测试用例的指定情况生成用例所需要的测试环境和实例。在这个测试环境中,测试驱动向实例发送一个或者多个需验证消息,然后根据实例状态变化、响应值、返回参数和结果,来判断验证消息是否通过。在所有测试用例验证项目执行后,测试驱动释放所有的已生成的实例和值域。

如果类包含了静态属性或者静态方法,同样需要对其进行测试。这些静态属性和方法属于类本身,表明该类本身就是个对象,无须实例化就可以直接调用这些属性和方法。

【010】类需要测试到什么程度?

类的测试程度取决于测试了多少类实现和类描述,并且不同类的测试程度估算比较困难,比如接口类中包含了1组方法,有个具体类实现了它,我们在具体类的测试用例中加入了该接口方法的测试,如果该具体类的其他实例方法没有和任何类交互,那么改类的测试覆盖率就是100%。每个类被实例化后都有自己的状态,状态影响操作的具体含义。对于任何一个类进行测试都需要进行综合考虑,穷举是一种无效率的工作方法,我们可以采用组合测试或者在多个测试用例中抽取重要的、覆盖面最大的测试用例执行测试。

【011】如何确定类测试用例?

类测试用例的确定和构造取决于准确的类描述,而类描述可能包含类UML设计、类CRC卡片和类状态机等工作。在类测试中介入了两种工作角色(设计人员和实现人员),这样避免了实现人员在类实现期间因误解了类描述,而将错误带入测试用例中,造成测试不准确或者测试失效现象。如果类没有匹配的描述工作,请设计人员不上,虽然可以采用“逆向工程”导出类描述,但是这样的类描述是欠缺的。

1、根据前置和后置状态确定测试用例

测试用例根据前置和后置条件来确定,其具体实现形式为各个测试方法体,并且在前置条件中指定输入值(包括常见值和边界值)来增加测试用例的测试覆盖率,每一个测试用例都可以包含特殊的前置条件(即错误前置条件)来观察测试用例失败后的异常处理机制是否正确。根据类描述得出测试用例的前置和后置条件,并且根据前置和后置条件的不同组合方式产生不同的测试用例具体测试方法体。

2、根据状态转换确定测试用例

很多人习惯用状态转换图来确定测试用例而不是根据测试用例的前置条件和后置状态,在状态图中类关联行为明显很容易被测试者辨别,但是这同样要求测试这需要设定更多的特殊值验证类关联关系(例如使用极端的输入值引起了补课预料的状态崩溃),并且使用状态转换图很难确定所有的测试用例。

3、根据代码确定测试用例

【012】如何构造类测试驱动?

RUP中测试的概念是测试优先于设计,而在XP中则表现为测试优先于编程。测试驱动的基本思想就是在对设计(或编码)之前先考虑好(或写好)测试代码,这样,测试工作就不仅仅是测试,而成为设计(或代码)的规范了。

类测试驱动器是运新干一个或者多个测试用例的可执行程序,编写类测试驱动有三种方法,分别是(1)调用Main方法、嵌入静态测试方法和实现独立测试类。(2)在类种嵌入静态测试方法,通过调用该测试方法来收集每个测试用例的执行结果。(3)实现独立的测试类。3种类测试驱动的编写方法在执行测试用例和获取执行后测试结果的效果是一样的,建议使用第三种测试驱动编写方式。

【013】类的测试方式有哪些?

类有三种不同的测试方式:

1、功能测试接口:测试用例根据类描述确定;

2、构造测试接口:测试用例着重测试类的构造(类可能包含多条构造方法);

3、交互测试接口:测试用例测试发送消息对一个对象的操作是否正确。

确定这些测试接口是为了后续维护的方便,它也体现了我们遵循何种规则来确定测试用例,并且关系到类的变化对测试用例的影响,表现了使用TestCase的行为实现。

如果类在具体实例化过程种出现了变化,那么就需要调整对应的测试驱动程序。

【014】Junit常用的接口和类

1、Test接口:运行测试和收集测试结果;

2、TestCase抽象类:定义测试中固定方法;

TestCase是Test接口的抽象实现(不能被实例化,只能被继承)

3、Assert静态类:一系列断言方法的集合;

4、TestSuit测试包类:多个测试的组合

TestSuit类负责组装多个TestCase,待测得类中可能包括对被测类的多个测试,而TestSuit负责收集这些测试,使我们可以在一个测试中,完成全部的对被测类的多个测试。

补充:一个测试成为TestCase(测试用例),而一组TestCase构成Testsuite(测试套件)。

【015】Junit编写测试类的基本步骤:

1>扩展TestCase类;

2>覆盖runTest()方法(可选);

3>写一些testXXXXX()方法;

【016】Junit一些具体的编写测试代码的技巧或较好的实践方法:

1.不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。

2.不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。

3.避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的会滚就可以了。

4.当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。

5.将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.)

6.测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。

7.确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。

8.如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。

9.尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。

10.测试要尽可能地小,执行速度快。

四阶龙格库塔法求解一次常微分方程组(python实现) 之前在博客发布了关于使用四阶龙格库塔方法求解一次常微分方程组的文章,由于代码缺少具体的验证,部分朋友可能存在疑问,因此这里打算再重新写一篇博客来验证一下程序的正确性,另外,这里是使用python语言来实现的。 阅读详情

相关推荐

C51编程25-应用篇(单片机与电脑端实现wifi通讯)

单片机使用ESP-01S wifi模块与电脑端进行数据通讯。

qq_34343637的博客 1万+

【总结】Junit FAQ(001-016)

    如果是初次接触Junit,你或许有一大堆的疑问,这里根据网上的资料整理出了一些可以用来解除你的疑惑的问题列表,我想对你是有用的:【001】没有人希望查看别人是如何设计测试类的。如果每个人都有不同的设计测试类的方法,光维护被测试的类就够烦了,谁还顾得上维护测试类?Junit是一个回归测试框架,所谓框架就是他的作者Erich Gamma 和 K ent Beck 定下了一些条条框框,你编写的测

wyingquan的专栏 1967

保姆级教程:手把手教你用CANoe/CANalyzer读取汽车故障码(UDS 0x19服务实战)

本文提供了一份详细的CANoe/CANalyzer使用教程,指导如何通过UDS 0x19服务读取汽车故障码。从硬件配置到报文构建,再到故障码解析,手把手教你完成汽车诊断全流程,特别适合汽车电子工程师和诊断开发人员。

weixin_42524945的博客 260

并发语言实现(八):并发与嵌入语言

嵌入式脚本系统中,跨语言调用易引发脚本阻塞宿主的疑难故障:现象为窗口卡死、无日志、开发机无法复现。根本原因在于脚本调用宿主函数(如host.confirm)时,占用同一线程,形成调用栈层层阻塞,且回调均按阻塞处理,导致整个进程停滞。虽嵌入省去跨进程通信开销,却带来共用地址空间风险——脚本野指针或死循环可直接破坏宿主。解决方案包括:单线程运行保障串行安全,通过Interpreter实例隔离;注册函数实现双向交互;输出输入由宿主接管;支持多载体并发以解阻塞困局。关键在于明确“谁拥有进程,谁负责边界约定”。

Dlite的技术笔记 210

从零开始的BW(五) 外部系统供数之OData测试

5、激活添加的服务,如提示下图中的激活失败,根据生成URI在事务代码SICF目录中找到对应的服务,设置超时时间,设置完之后重新激活即可,详情可参考SAP note 1986626。如果刚才设置BY Odata的query在这没有显示,SE38执行程序EQ_RS_AUTOSETUP,选中需要生成服务的query,生成服务后再去添加服务。测试get方法,URI中默认的参数是?4、事务代码/IWFND/MAINT_SERVICE中添加服务,如果提示用户不再登陆,在事务代码前加上/O或者/N即可。

m0_61386064的博客 1108

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6419

Junit、反射、注解、代理

本文介绍了Java中Junit单元测试、反射、注解与代理四大核心技术。Junit通过@Test注解标记测试方法,实现自动化测试;反射通过Class对象获取类的构造器、属性和方法,支持动态操作私有成员;注解作为元数据标记,结合反射可实现自定义注解解析与框架设计;代理模式则通过动态代理实现方法增强,如权限控制或性能监控。文中结合实例演示了反射绕过泛型、保存对象信息、模拟JUnit及计算方法执行时间等实际应用,展现了这些技术在开发中的核心价值。

m0_54235152的博客 162

Winform使用TreeView控件实现带复选框的三态树

刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。首先新建一个Winform工程拖个TreeView控件,然后运行。。。嗯。。。加点数据吧。private void CreateTree() { TreeNode anime = new TreeNode...

laoyezha的博客 2万+

【Lua进阶系列】Lua 调试机制详解:从虚拟机调用栈、错误传播到 debug 库

本文深入解析 Lua 调试机制的底层原理,强调调试并非重新执行程序,而是利用虚拟机已维护的运行时状态与编译阶段保留的调试信息。通过分析函数调用栈、字节码与源码行号映射关系,揭示 debug 库函数(如 getinfo、getlocal、traceback)如何读取调用链与局部变量。同时说明错误传播机制及 pcall/xpcall 的保护作用,并指出剥离调试信息虽可减小文件体积,但会削弱调试能力。核心在于理解:调试是基于虚拟机运行时状态与编译辅助信息的协同结果。

努力努力再努力wz的博客 276

子图同构之乌尔曼算法Ullmann Algorithm的python实现

给定两个图Ga​(子图)和Gb​(原图),其中Ga​有pa​个点和qa​条边,Gb​有pb​个点和qb​条边,其邻接矩阵分别为A和B。子图同构的关键在于找到一种从Ga​的点到Gb​的点的映射MM是一个pa​行pb​列的矩阵,且满足每行只有一个1(表示Ga​中的一个点唯一地映射到Gb​中的一个点),每列至多一个1(确保Gb​中的点不会被重复映射)。定义Ccij​MMBT,若在图Ga​。

weixin_42822813的博客 1974

GEE生物量预测:利用多源遥感数据和随机森林算法RF构建地上生物量(AGB)预测模型,并实现未来年份的生态变化模拟(大面积生物量反演)

数据融合策略:整合5类遥感产品(AGB、NDVI、LAI、土地覆盖、地形)时序特征构建:采用生长季中值法降低云污染影响机器学习优化分层采样保证数据代表性80棵决策树平衡精度与效率预测可靠性基准期R²达0.76需结合地面实测数据校正。

此星光明博客 419

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 292

【Pytorch实战教程】基于RML2018的融合网络分类 | LSTM网络和ResNet网络融合 | 含数据集的处理

这段代码是从原始数据中读取所选择的数据,画出星座图,并将星座图保存本地,然后将IQ数据保存成mat文件,将图片数据读取之后保存为npy文件,方便后续融合网络使用。

若北辰 928

模型之外的那套装置:用 AI harness 完成一个三端同步应用

AI harness 指模型之外、让模型能持续产出可交付软件的全部工程装置。本文把它称作"支架"。它由五层构成:输入层规定模型读什么,反馈层规定模型怎么知道自己错了,观测层把界面与设备状态变成可读事实,记忆层让跨会话不失真,边界层规定哪些动作不许模型自行作出。支架的价值在六天里可以直接计量。

Leo的Matrix 166

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 190

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 350

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 141

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 237

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 152

附录一源码阅读路线与断点索引

本索引固定于Boot 3.5.7与Framework 6.2.12。先选择要解释的现象,再打开对应源码。表中观察对象是逻辑名称,不保证在所有重载中都是同名局部变量。抽象接口和注解用于阅读契约,不提供可执行方法体断点。

weixin_45476869的博客 153

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 185

MCP实战06:传输实战、测试与部署

你的 MCP Server 写完了,怎么确认它真的能被宿主正确调用?这课给传输层实战三件套:MCP Inspector 可视化调试、协议级自动化测试(pytest 断言 JSON-RPC 报文结构)、stdio/HTTP 双传输部署。测试不是可选项——工具描述错一个字段宿主就调不对,你能给 Server 建起自己的回归测试。

Blockbuster-drug 774

大型高复杂度互联网项目管理经验心得

复杂项目,管理的核心不是管人,而是管理依赖和变更简单项目重点是排任务、盯进度;多端多关联系统的大型项目,大部分延期、故障根源都来自依赖失控、变更失控。项目经理首要工作是把看不见的依赖显性化,把随意变更变成受控变更,而不是单纯催开发进度。分批上线不是降低标准,而是拆分风险,小步可控很多人觉得分批上线麻烦,希望攒到一起发布。但集中上线会把所有风险集中在同一个窗口,一旦出问题,排查范围巨大、影响面广。分批发布本质是风险隔离,每一批只承载有限的变更,出问题更容易定位、回滚、止损。

zyx980193917的博客 189

【LTE L3 笔记 05】LTE同步信号

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 116

电芯串并联与BMS保护

串联升压、并联扩容,规则一句话,但整包能用多少由最弱的那节电芯说了算。这篇先算最弱电芯的账,再讲清三层保护,最后给对应的BMS测试用例:欠压、压差、均衡怎么测。BMS项目里有个常见场面:两台同配置的样车,电芯是同一批的,跑出来续航和限功率点却对不上。拆包量单体,一台里有一节电芯的容量比其他低了8%。整包表现被一节拖住,就是串并联的规矩在起作用。这篇先把规则和算例讲清,再讲保护分层,最后落到测试用例。

qq_43241255的博客 232

AI提效测试实践论

11、测试结束后,必须将任务过程中所有走了弯路,多次尝试的才成功操作的最终解决办法,按1、2、3...列点追加写入到当前文件的“特别注意要点”下(必须只记一行摘要,完整内容另存 [当前AGENTS.md文件所在的目录]\details\[序号].md)(如果新纪录的要点和历史要点存在冲突,必须直接对历史要点进行修正。`测试用例` 章节下必须按用例分层组织为 `冒烟集`、`主流程集`、`边界集`、`回归集` 四个子集,并在 `用例结果汇总` 中统计各分层集的用例数量。3、是否存在BUG;没有则写“无”> |

weixin_44711513的博客 125
上一篇: 读属性文件,操作数据库
下一篇: 循序渐进学习JUnit
Explorerwen
博客等级 码龄23年 4粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值