[笔记] 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 ...
 
随机推荐
- IntelliJ IDEA和Eclipse快捷键对比总结
 - c++关于字符串的读入和截取
			
#include<iostream>#include<string>#include<vector>using namespace std;vector<st ...
 - Promise中有多个resove
			
return new Promise((resolve, reject) => { resolve({ status: }) if (true) { resolve({ status: }) } ...
 - Oracle之:Function :dateToNumber()
			
create or replace function dateToNumber(i_date in date) return number is result number ; begin resul ...
 - Monkey使用详情
			
https://blog.csdn.net/zhangmeng1314/article/details/82699316 比如使用 adb shell input keyevent <keyco ...
 - dataGridView添加ComboBox 每行绑定不同的集合,显示默认值
			
好了 多说无意,直接上代码,看不看的懂,就看大家的了,解决问题后,可以评论回复,可以一起商讨一些疑难杂症 List<ProtocolInfo> list = piDB.FindAll(). ...
 - MVN 报错1
			
找不到mapper映射文件 只打包了下面这些 所以pom.xml文件中添加 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --> <build> ...
 - LibreOffice/Calc:取消单元格中的超链接
			
造冰箱的大熊猫@cnblogs 2019/2/27 在LibreOffice Calc的表格中输入电子邮箱地址或者网址后,软件会自动将输入内容转换为超链接形式显示.在某些情况下这种自动转换并非用户所 ...
 - Makefile简单编写实例
			
介绍一下Makefile的简单编写例子. 编写Makefile的规则就是: 目标文件:依赖文件 (tab)编译规则 现在我有一个文件目录结构为: 解释一下这几个文件.首先我创建makefile目录,底 ...
 - Python3 日期与时间戳互相转换(函数可调用)
			
一.前言 在开发中,我们经常会遇到时间戳转换日期,或者日期转换为时间戳: 日期格式:2019-08-01 00:00:00 时间戳格式:1564588800 关于时间戳 Unix时间戳(Unix ti ...