博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二次作业
阅读量:6114 次
发布时间:2019-06-21

本文共 2999 字,大约阅读时间需要 9 分钟。

目录

本文章初次发表于,若出现排版问题或想获得更好的显示效果,请访问上述地址。

1. 测试工具 Catch的初步了解和使用


1. Catch简介

由于本次作业的主要目的是实现简单的单元测试,不需要太多额外的功能,再加上个人不喜欢使用太过笨重的VS,故使用一种更加轻便的测试工具Catch

Catch工具发布于GitHub,可以通过如下链接访问。从其主页可以了解到,Catch是C++的头文件自动测试工具,同时包含多种时下流行的测试框架和方法,简单的单元测试自然不在话下。

Catch stands for C++ Automated Test Cases in Headers and is a multi-paradigm automated test framework for C++ and Objective-C (and, maybe, C).

接下来阅读使用方法,得知Catch项目只是一个头文件,下载catch.hpp。调整环境变量包含或者直接放进文件夹目录即可使用。

The simplest way to get Catch is to download the latest single header version.

Catch is header only. All you need to do is drop the file(s) somewhere reachable from your project - either in some central location you can set your header search path to find, or directly into your project tree itself! This is a particularly good option for other Open-Source projects that want to use Catch for their test suite.


2. 如何使用catch书写测试

官方的文档很详细,但是理解了还会觉得有些罗嗦,我简单解释一下catch测试工具的用法。下面举一个栗子,这是一个已经包含了catch头文件和待测试文件的文件夹,文件结构应该是这样的。

.├── catch.hpp└── moudle1.cpp
  1. 使用测试的第一步自然是写测试了,创建一个新的文件,包含需要测试的文件,再包含的catch.hpp。这样准备工作就完成了,接下来就可以开始写测试用例了。
  2. 准备完成了,那么该如何写测试呢?查阅官方的tutorial文档可知,测试的初步书写方法如下,还初步了解到了TEST_CASE的两个参数的含义。

    TEST_CASE( "Factorials are computed", "[factorial]" ) { REQUIRE( Factorial(1) == 1 ); REQUIRE( Factorial(2) == 2 ); REQUIRE( Factorial(3) == 6 ); REQUIRE( Factorial(10) == 3628800 ); }

    TEST_CASE( test name [, tags ] )

    书写完的测试文件应该是这样的。

    c //moudle1-test.cpp #include "catch.hpp" #include "fact.cpp"//包含功能实现文件 TEST_CASE( "Factorials are computed", "[factorial]" ) { REQUIRE( Factorial(1) == 1 ); REQUIRE( Factorial(2) == 2 ); REQUIRE( Factorial(3) == 6 ); REQUIRE( Factorial(10) == 3628800 ); }

  3. 现在测试写完了,那么如何运行呢?tutorial文档中为了简便采取了单文件测试的方法,但是实际上是不推荐的。

    再次强调一遍:除非需要测试的内容或者测试用例极少,否则不推荐将运行测试文件和测试实现文件书写在一起。最佳的方式还是将运行测试的文件和测试实现的文件分开。

    • The requirement is that the following block of code (or equivalent):
      #define CATCH_CONFIG_MAIN
      #include "catch.hpp"
      appears in exactly one source file.
    • Each additional file need only #include "catch.hpp" - do not repeat the #define!

    正如上面节选的文档内容,只需要在一个文件中书写这两行即可,而且也不需要多余的内容。其余测试文件禁止包含上述的#define内容。

    为什么需要有一个文件要多写一行呢?这一行有什么用?又为什么要写呢?
    结论显而易见。这个与众不同的测试文件自然就是运行测试文件了,多出的这一行自然是调用内置的main函数,编译这个文件即可得到测试结果。最后还要提醒一点,测试运行文件记得包含其余的测试文件,只有这两行自然是无法测试的,再举一个栗子。
    C //test-run.cpp #define CATCH_CONFIG_MAIN #include "catch.hpp" #include "moudle1-test.cpp"//上面写好的测试文件

做好所有工作,最后我们的文件结构应该是这样的。

.├── catch.hpp├── moudle1.cpp├── moudle1-test.cpp└── test-run.cpp

然后g++ test-run.cpp ./a.out即可得到测试结果。

若想查看整体代码,请点击我的。

2. 编写测试用例,验证


学会了工具的使用,剩下的就很简单了,挑选各种的测试样例,对边界和各种意外情况进行测试。同时发现问题进行修改。以下是我的测试样例和测试结果。

用例编号 用例描述 输入数据 预期输出数据 实际输出数据 通过/不通过 评价
1 递增正数 1,2,3,9,11,999 1025 1025 通过 结果正常
2 递减负数 -1, -2, -3, -6, -9, -11 -1 -1 通过 结果正常
3 随机数字 64, -3456, 568, 345, -568, 46 913 913 通过 结果正常
4 单个正数 9 9 9 通过 结果正常
5 单个负数 -13 -13 -13 通过 结果正常

3. 总结


经过上面的学习,就初步掌握了catch测试工具的初步使用方法,同时也对单元测试进行了实践,同时也熟练了linux命令行的操作技术。然而catch工具还有很多其他的测试功能,诸如BDD、TDD都有,linux命令行也还有很多要学的地方。继续学习,进而掌握这个测试工具,接着熟悉,经常使用命令行提高自己的技能,以后的代码书写和对Linux系统的理解也会事半功倍。

转载于:https://www.cnblogs.com/ysrcyx/p/5939935.html

你可能感兴趣的文章
PHP使用DES进行加密和解密
查看>>
Oracle 如何提交手册Cluster Table事务
查看>>
BeagleBone Black第八课板:建立Eclipse编程环境
查看>>
在服务器上用Fiddler抓取HTTPS流量
查看>>
文件类似的推理 -- 超级本征值(super feature)
查看>>
【XCode7+iOS9】http网路连接请求、MKPinAnnotationView自定义图片和BitCode相关错误--备用...
查看>>
各大公司容器云的技术栈对比
查看>>
记一次eclipse无法启动的排查过程
查看>>
【转】jmeter 进行java request测试
查看>>
读书笔记--MapReduce 适用场景 及 常见应用
查看>>
SignalR在Xamarin Android中的使用
查看>>
走过电竞之路的程序员
查看>>
Eclipse和MyEclipse使用技巧--Eclipse中使用Git-让版本管理更简单
查看>>
[转]响应式表格jQuery插件 – Responsive tables
查看>>
8个3D视觉效果的HTML5动画欣赏
查看>>
C#如何在DataGridViewCell中自定义脚本编辑器
查看>>
【linux】crontab定时命令
查看>>
Android UI优化——include、merge 、ViewStub
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>