[笔记] Delphi使用DUnitX做单元测试的简单例子
Delphi XE 提供了对DUnitX的支持,记录一个最简例子。
首先创建项目A,然后创建单元untCalc
,代码如下:
unit untCalc;
interface
type
TCalc = class(TObject)
public
class function Add(a, b: Integer): Integer;
function Mul(a, b: Integer): Integer;
end;
implementation
{ TCalc }
class function TCalc.Add(a, b: Integer): Integer;
begin
Result := a + b;
end;
function TCalc.Mul(a, b: Integer): Integer;
begin
Result := a * b;
end;
end.
为了体现多样性,Add
函数是类函数,Mul
函数是普通函数。
然后在主菜单中选择新建/DUnitX
,选择DUnitX Project
,按需勾选即可创建一个DUnitX
的测试项目。
重命名测试代码文件untCalcTest
内容如下:
unit untCalcTest;
interface
uses
DUnitX.TestFramework, untCalc;
type
[TestFixture]
TClacTest = class
protected
class var FCalc: TCalc;
public
[Setup]
procedure Setup;
[TearDown]
procedure TearDown;
[Test]
[TestCase('正数相加', '1|2|3', '|')]
[TestCase('负数相加', '-1,-2,-3')]
procedure TestAdd(const a, b, c: Integer);
[Test]
[Ignore('需要重新修改')]
procedure TestMul(const a, b, c: Integer);
end;
implementation
procedure TClacTest.Setup;
begin
FCalc := TCalc.Create;
end;
procedure TClacTest.TearDown;
begin
FCalc.Free;
end;
procedure TClacTest.TestAdd(const a, b, c: Integer);
begin
Assert.AreEqual(TCalc.Add(a, b), c);
end;
procedure TClacTest.TestMul(const a, b, c: Integer);
begin
Assert.AreEqual(FCalc.Mul(a, b), c);
end;
initialization
TDUnitX.RegisterTestFixture(TClacTest);
end.
上面代码可以看到,Setup
是开始时的初始化,TearDown
是退出时的处理。
可以通过在函数声明部分添加属性的方式添加简单的测试用例,参数默认是逗号分隔,放在字符串中,如果使用了其他分隔符(如"|"),需要在后面添加分隔符作为参数。
Ignore
表示跳过这个测试项。
运行结果如下:
**********************************************************************
* DUnitX - (c) 2015-2018 Vincent Parrett & Contributors *
* *
* License - http://www.apache.org/licenses/LICENSE-2.0 *
**********************************************************************
Fixture : untCalcTest
-------------------------------------------------
Fixture : untCalcTest.TClacTest
-------------------------------------------------
Test : untCalcTest.TClacTest.TestAdd.正数相加
-------------------------------------------------
Running Setup for : TestAdd.正数相加
Executing Test : TestAdd.正数相加
Running Teardown for Test : TestAdd.正数相加
Success.
Test : untCalcTest.TClacTest.TestAdd.负数相加
-------------------------------------------------
Running Setup for : TestAdd.负数相加
Executing Test : TestAdd.负数相加
Running Teardown for Test : TestAdd.负数相加
Success.
Test : untCalcTest.TClacTest.TestMul
-------------------------------------------------
Test Ignored : TestMul : 需要重新修改
Running Fixture Teardown Method : Destroy
Done testing.
Tests Found : 3
Tests Ignored : 1
Tests Passed : 2
Tests Leaked : 0
Tests Failed : 0
Tests Errored : 0
Done.. press <Enter> key to quit
接着修改一处测试用例,故意让测试失败,修改如下:
[TestCase('正数相加', '1|2|4', '|')]
运行结果如下:
**********************************************************************
* DUnitX - (c) 2015-2018 Vincent Parrett & Contributors *
* *
* License - http://www.apache.org/licenses/LICENSE-2.0 *
**********************************************************************
Fixture : untCalcTest
-------------------------------------------------
Fixture : untCalcTest.TClacTest
-------------------------------------------------
Test : untCalcTest.TClacTest.TestAdd.正数相加
-------------------------------------------------
Running Setup for : TestAdd.正数相加
Executing Test : TestAdd.正数相加
Running Teardown for Test : TestAdd.正数相加
Test failed : TestAdd.正数相加 : Expected 3 but got 4
Test : untCalcTest.TClacTest.TestAdd.负数相加
-------------------------------------------------
Running Setup for : TestAdd.负数相加
Executing Test : TestAdd.负数相加
Running Teardown for Test : TestAdd.负数相加
Success.
Test : untCalcTest.TClacTest.TestMul
-------------------------------------------------
Test Ignored : TestMul : 需要重新修改
Running Fixture Teardown Method : Destroy
Done testing.
Tests Found : 3
Tests Ignored : 1
Tests Passed : 1
Tests Leaked : 0
Tests Failed : 1
Tests Errored : 0
Failing Tests
untCalcTest.TClacTest.TestAdd.正数相加
Message: Expected 3 but got 4
Done.. press <Enter> key to quit.
可见,错误之处被显示了出来。
以上只是最简的例子,更多的功能按需挖掘吧。
[笔记] Delphi使用DUnitX做单元测试的简单例子的更多相关文章
- 持续集成之单元测试篇——WWH(讲讲我们做单元测试的故事)
持续集成之单元测试篇--WWH(讲讲我们做单元测试的故事) 前言 临近上线的几天内非重大bug不敢进行发版修复,担心引起其它问题(摁下葫芦浮起瓢) 尽管我们如此小心,仍不能避免修改一些bug而引起更多 ...
- QML学习笔记(五)— 做一个简单的待做事项列表
做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...
- 使用karma+jasmine做单元测试
目的 使用karma和jasmine来配置自动化的js单元测试. Karma和Jasmine Karma是由Angular团队所开发的一种自动化测试工具.链接:http://karma-runner. ...
- 使用MS Test做单元测试
声明:本篇博客翻译自:http://www.c-sharpcorner.com/article/unit-testing-with-ms-tests-in-c-sharp/ 写在翻译之前: 依然清晰的 ...
- PHPUnit单元测试的简单使用
何为单元测试: 指对软件中的基本单元进行测试,如函数.方法等,以检查其返回值或行为是否符合预期:实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文 ...
- 【学习笔记】C#中的单元测试
周一老师讲完单元测试以后,感觉挺好玩,通过查资料和相关书籍学到了几种C#在VS2010的测试方法,跟大家分享下,图文并茂啊,有木有~~ 1.从被测试的代码中生成单元测试 1.1创建C#控制台程序,命名 ...
- 换种思路写Mock,让单元测试更简单
开篇引入 单元测试中的Mock方法,通常是为了绕开那些依赖外部资源或无关功能的方法调用,使得测试重点能够集中在需要验证和保障的代码逻辑上.在定义Mock方法时,开发者真正关心的只有一件事:" ...
- spring junit 做单元测试,报 Failed to load ApplicationContext 错误
spring junit 做单元测试,报 Failed to load ApplicationContext 错误. 查找了好一会,最后发现.@ContextConfiguration(locatio ...
- 使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹
使用Jython对Java做单元测试,当然,为了测试开发java代码.这涉及到引入第三包的问题,如何导入第三方的包? 您可以使用http://blog.csdn.net/powerccna/artic ...
随机推荐
- docker 运行centos显示连不上网络
centos 7 docker 启动了一个web服务 但是启动时 报 WARNING: IPv4 forwarding is disabled. Networking will not work. 网 ...
- Numpy 文件读写
NumPy 文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式 二进制的文件读写 save np.save ("./文件名", 数组名):以二进制的格式保存数据 保存 ...
- kubernetes(K8S)快速安装与配置集群搭建图文教程
kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...
- js栈和堆的区别
一. 堆(heap)和栈(stack) 栈(stack)会自动分配内存空间,会自动释放.堆(heap)动态分配的内存,大小不定也不会自动释放. 二. 基本类型和引用类型 基本类型:简单的数据段,存 ...
- New!Devexpress WPF各版本支持VS和SQL Server版本对应图
点击获取DevExpress v19.2.3完整版试用下载 本文主要为大家介绍DevExpress WPF各大版本支持的VS版本和支持的.Net版本图,Devexpress WPF v19.2.3日前 ...
- 09-sp_lock和sys.dm_tran_locks的用法
一.总结 1.网址 https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-lock ...
- nginx.conf文件的使用
默认配置语法 全局---服务级别的配置 user 设置nginx服务的系统使用用户,基本上不用动 worker_processes 工作进程数---跟nginx多worker有关,增大连接数的并发处理 ...
- 小猿圈-IT自学人的小圈子 https://book.apeland.cn/details/54/
笔记链接 https://book.apeland.cn/details/54/ 学习视频 https://www.apeland.cn/python
- for update的作用和用法
一.for update定义 for update是一种行级锁,又叫排它锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它 ...
- Java mongodb api疑问之MongoCollection与DBCollection
在学习Java mongodb api时发现,可以调用不同的java mongodb api来连接数据库并进行相关操作. 方式一: 该方式使用mongoClient.getDB("xxx&q ...