开始使用catch呢!

catch的好处是,它只有一个头文件,

坏处是,它需要C++11,不过不是很坏。

catch有两种测试用例的书写方式:

Normal

  1. unsigned int Factorial( unsigned int number ) {
  2. return number < 1 ? 1 : Factorial(number-1)*number;
  3. }
  4. TEST_CASE( "Factorials are computed", "[factorial]" ) {
  5. REQUIRE( Factorial(0) == 1 );
  6. REQUIRE( Factorial(1) == 1 );
  7. REQUIRE( Factorial(2) == 2 );
  8. REQUIRE( Factorial(3) == 6 );
  9. REQUIRE( Factorial(10) == 3628800 );
  10. }

BBD

SCENARIO, GIVEN, WHEN and THEN macros, which map on to TEST_CASEs and SECTIONs, respectively

  1. SCENARIO( "vectors can be sized and resized", "[vector]" ) {
  2. GIVEN( "A vector with some items" ) {
  3. std::vector<int> v( 5 );
  4. REQUIRE( v.size() == 5 );
  5. REQUIRE( v.capacity() >= 5 );
  6. WHEN( "the size is increased" ) {
  7. v.resize( 10 );
  8. THEN( "the size and capacity change" ) {
  9. REQUIRE( v.size() == 10 );
  10. REQUIRE( v.capacity() >= 10 );
  11. }
  12. }
  13. WHEN( "the size is reduced" ) {
  14. v.resize( 0 );
  15. THEN( "the size changes but not capacity" ) {
  16. REQUIRE( v.size() == 0 );
  17. REQUIRE( v.capacity() >= 5 );
  18. }
  19. }
  20. WHEN( "more capacity is reserved" ) {
  21. v.reserve( 10 );
  22. THEN( "the capacity changes but not the size" ) {
  23. REQUIRE( v.size() == 5 );
  24. REQUIRE( v.capacity() >= 10 );
  25. }
  26. }
  27. WHEN( "less capacity is reserved" ) {
  28. v.reserve( 0 );
  29. THEN( "neither size nor capacity are changed" ) {
  30. REQUIRE( v.size() == 5 );
  31. REQUIRE( v.capacity() >= 5 );
  32. }
  33. }
  34. }
  35. }

最佳实践

将catch宏和头文件用一个单独的main文件包含,避免编译时的时间浪费;

  1. // tests-main.cpp
  2. #define CATCH_CONFIG_MAIN
  3. #include "catch.hpp"
  1. // tests-factorial.cpp
  2. #include "catch.hpp"
  3. #include "factorial.h"
  4. TEST_CASE( "Factorials are computed", "[factorial]" ) {
  5. REQUIRE( Factorial(1) == 1 );
  6. REQUIRE( Factorial(2) == 2 );
  7. REQUIRE( Factorial(3) == 6 );
  8. REQUIRE( Factorial(10) == 3628800 );
  9. }

使用catch做单元测试简介的更多相关文章

  1. EnvironmentPostProcessor怎么做单元测试?阿里P7解答

    简介 从Spring Boot 1.3开始,我们可以在应用程序上下文刷新之前使用EnvironmentPostProcessor来自定义应用程序的Environment.Environment表示当前 ...

  2. 单元测试简介和Junit的使用介绍

    单元测试简介和Junit的使用介绍 Junit是Java开发中用来支持单元测试的一个软件,这里对它的基本情况.使用方法等做简单的介绍. 提纲 1.软件测试 2.单元测试概述 3.单元测试的具体做法 4 ...

  3. spring junit 做单元测试,报 Failed to load ApplicationContext 错误

    spring junit 做单元测试,报 Failed to load ApplicationContext 错误. 查找了好一会,最后发现.@ContextConfiguration(locatio ...

  4. 使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹

    使用Jython对Java做单元测试,当然,为了测试开发java代码.这涉及到引入第三包的问题,如何导入第三方的包? 您可以使用http://blog.csdn.net/powerccna/artic ...

  5. 使用karma+jasmine做单元测试

    目的 使用karma和jasmine来配置自动化的js单元测试. Karma和Jasmine Karma是由Angular团队所开发的一种自动化测试工具.链接:http://karma-runner. ...

  6. 使用MS Test做单元测试

    声明:本篇博客翻译自:http://www.c-sharpcorner.com/article/unit-testing-with-ms-tests-in-c-sharp/ 写在翻译之前: 依然清晰的 ...

  7. 持续集成之单元测试篇——WWH(讲讲我们做单元测试的故事)

    持续集成之单元测试篇--WWH(讲讲我们做单元测试的故事) 前言 临近上线的几天内非重大bug不敢进行发版修复,担心引起其它问题(摁下葫芦浮起瓢) 尽管我们如此小心,仍不能避免修改一些bug而引起更多 ...

  8. xcode 5 使用 XCTest 做单元测试

    xcode 5 使用 XCTest 做单元测试 什么是单元测试,请看 百度百科 单元测试 一:在xcode5 之前,我们新建项目时,可以选择是否集成单元测试:如今在xcode5,我们新建立的项目默认就 ...

  9. Web项目如何做单元测试

    你可能会用单元测试框架,python的unittest.pytest,Java的Junit.testNG等. 那么你会做单元测试么!当然了,这有什么难的? test_demo.py def inc(x ...

随机推荐

  1. Ubuntu 16.04安装Eclipse并创建桌面快捷方式

    系统:Ubuntu 16.04 JDK版本:1.8.0_121 1.官网下载eclipse,我的版本是eclipse-jee-neon-2-linux-gtk-x86_64.tar.gz,只要JDK版 ...

  2. Django小项目web聊天

    WEBQQ的实现的几种方式 1.HTTP协议特点 首先这里要知道HTTP协议的特点:短链接.无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发 ...

  3. mongodb的安装和权限管理

    mongodb4.0已经发布,但是鉴于线上环境更多的是使用旧版本的mongodb,我们这里使用的mongodb3.4版本. 官网下载地址为:https://fastdl.mongodb.org/lin ...

  4. 20144303石宇森《网络对抗》逆向及Bof基础

    20144303石宇森<网络对抗>逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...

  5. libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)

    转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程) 转载:https://my.oschina.net/u/14207 ...

  6. HBuilder 获取通讯录

    代码: var content=""; function getCallLog() { try{ plus.contacts.getAddressBook(plus.contact ...

  7. 我的第一个Windows服务

    代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  8. HDU 6351 Beautiful Now(DFS)多校题解

    思路:一开始对k没有理解好,题意说交换k次,如果我们不需要交换那么多,那么可以重复自己交换自己,那么k其实可以理解为最多交换k次.这道题dfs暴力就行,我们按照全排列最大最小去找每一位应该和后面哪一位 ...

  9. Redis之字符串

    Redis 字符串 String 是redis最基本的类型,value 不仅可以是 String,也可以是数字. 使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高 ...

  10. Python学习札记(二十九) 模块2

    参考:使用模块 NOTE 1.内建sys模块: #!/usr/bin/env python3 import sys 'a test module' __author__ = 'wasdns' def ...