C++单元测试入门

自己着手在写个完整的全新项目,之前也听说单元测试可以提高程序的健壮性。可是自己找不到合适的资料,对于如何编写单元测试,是一点都不懂。求推荐一些资料,或是单元测试框架~~

阅读 16.8k
3 个回答

肯定有人会给你推荐一些经典的单元测试框架,如GoogleTest, cppunit 之类。

但我负责任的告诉你,那些框架太折腾了,你需要花很多时间和精力去学习使用,然后即使是一个非常非常小的项目,也要配置半天。

推荐给你一个新兴的单元测试框架:Catch

它简单到什么程度?你只需要引入一个头文件:

#include "catch.hpp"

另外,它因为非常简单轻巧,所以很容易学习,把这个简短的教程看一遍,基本就掌握了。

为了更直观的了解这个框架,贴出教程上的一个例子:

#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
#include "catch.hpp"

unsigned int Factorial( unsigned int number ) {
    return number <= 1 ? number : Factorial(number-1)*number;
}

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

这就是测试一个阶乘函数的全过程。感觉如何?


因为你标题注明了是C++,所以我也先入为主的认为你是想找单元测试实践方面的资料。针对C++语言的单元测试书籍非常少,我就推荐一本吧:

Modern C++ Programming with Test-Driven Development


如果你是对单元测试用例设计的理论知识感兴趣,求资料。那么我建议你去了解一下TDD的相关知识,然后就可以去看一些有针对性的书籍(只推荐一本,讲的非常具体):

甚至还可以先去对软件测试这个领域进行一些基本的了解,推荐几本书:

新手上路,请多包涵

C++单元测试打桩
https://github.com/coolxv/cpp-stub

#include<iostream>
#include "stub.h"
using namespace std;
int foo(int a)
{   
    cout<<"I am foo"<<endl;
    return 0;
}
int foo_stub(int a)
{   
    cout<<"I am foo_stub"<<endl;
    return 0;
}


int main()
{
    Stub stub;
    stub.set(foo, foo_stub);
    foo(1);
    return 0;
} 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏