UT测试框架cxxtest和gtest对比

这篇博客对比了CxxTest和Google Test两个单元测试框架。CxxTest需要通过Perl或Python脚本将测试用例转换为.cpp文件,而Google Test可以直接在.cpp文件中编写,功能更加强大,如支持参数化测试和多种事件机制。CxxTest集成到makefile简单,但需要额外安装Perl或Python。对于没有特殊需求的简单用例,CxxTest是一个不错的选择;而面对复杂应用场景,推荐使用Google Test。
部署运行你感兴趣的模型镜像

 由于不同的项目分别使用了cxxtest和gtest不同的UT测试框架,所以对它们有点了解。总体来说,gtest功能比较强大,但相对复杂一点。

cxxtest的测试用例是先写到一个.h的文件里,然后用脚本把它转成.cpp的文件,看起来有点别扭,但集成到你的makefile里,也是比较简单的。不过它有个麻烦的地方是你要先装个perl或者python。

它的例子如下:

class SampletestSuite : publicCxxTest::TestSuite   

{

public:

     //定义测试,以test作为测试函数前缀,

     //这是cxxtestgen.pl或cxxtestgen.py对测试文件进行扫描,抽取测试用例的依据

     void testMultiplication(void )   

     {

         TS_ASSERT_EQUALS( 2 * 2, 5 );

     }

};

如果要在每个用例之前执行环境准备工作可以在setUp();函数里添加。如果要在每个用例之后执行一些清理工作则在tearDown();函数里实现。这两个函数实现时都包含在测试类里面。

gtest则直接在.cpp文件里写你的测试用例,不用工具转换,这点省事一点。你写测试用例时需要使用它的宏来声明你用例。例如:TEST(SUITECASENAME,TESTCASENAME){}。gtest重要的地方是它的功能比较强大。它支持参数化测试。在你需要考虑给被测函数传入不同的值的情况时非常有用。同时gtest提供了多种事件机制,非常方便我们在案例之前或之后做一些操作。总结一下gtest的事件一共有3种:

1. 全局的,所有案例执行前后。

2. TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后。

3. TestCase级别的,每个TestCase前后。

但是要实现上面的功能,都有一些额外的要求。比如:要实现第三情况:需要写一个类,继承testing::Test,然后再实现的是SetUp方法和TearDown方法,同时在编写测试案例时,还需要使用TEST_F这个宏,相对cxxtest有点罗嗦。下面是个例子:

class FooCalcTest:public testing::Test
{
protected:
    
virtual void SetUp()
    {
        m_foo.Init();
    }
    
virtual void TearDown()
    {
        m_foo.Finalize();
    }

    FooCalc m_foo;
};

TEST_F(FooCalcTest, HandleNoneZeroInput)
{
    EXPECT_EQ(
4, m_foo.Calc(1216));
}

TEST_F(FooCalcTest, HandleNoneZeroInput_Error)
{
    EXPECT_EQ(
5, m_foo.Calc(1216));
}

 

总结:如果你没有啥特殊要求,写用例简单至上,你可以考虑cxxtest;如果你需要考虑特殊的应用场景,可以考虑gtest,它功能强大。

其他gtest 相关的的文章可以看http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值