标签: cppunit

C++单元测试框架的比较

我知道关于C++单元测试框架的建议已经存在一些问题,但所有答案都没有帮助,因为他们只是推荐其中一个框架,但没有提供有关(特征)比较的任何信息.

我认为最有趣的框架是CppUnit,Boost和新的Google测试框架.有人做过任何比较吗?

c++ unit-testing cppunit googletest boost-test

287
推荐指数
7
解决办法
25万
查看次数

GoogleTest与CppUnit:事实

在为接下来的几年设置我们的C++单元测试框架的过程中,我们将GoogleTestCppUnit列入了候选名单.我对两者都有一些经验,而我的偏好是GoogleTest.无论如何要说服我的老板我需要一些事实,所以我在互联网上做了一些阅读,包括手册,维基页面和一些来源.我想出了一个GoogleTest优势列表和一个CppUnit优势(图形测试跑步者).在这里,他们按照感知有用性排序:

  • INSTANTIATE_TEST_CASE_P用你想要的任何参数实例化一个测试用例,包括笛卡尔积
  • FRIEND_TEST用于测试私有类成员(针对所有遗留代码)
  • 将断言转变为断点
  • 非致命的断言
  • "开箱即用"googlemock整合
  • 自动测试检测,无需枚举它们
  • 可以禁用和启用测试
  • 可以使用名称模式选择要运行的测试
  • 值/类型参数化测试
  • 用户定义的谓词断言
  • 死亡测试
  • 更丰富的断言
  • 类型断言
  • 在子程序上断言
  • 可以使用<<添加其他调试信息到断言
  • RecordProperty将最后一个属性值发送到XML输出
  • SCOPED_TRACE有助于理解来自子例程或循环内部的断言失败的上下文.
  • xUnit XML输出可以立即由Jenkins显示,而不需要在它们之间进行XSLT转换
  • 支持自定义类型打印机
  • 测试指示消耗的时间(我怀疑CppUnit也可以这样做,但我还没想到它)
  • 测试事件监听器API(用户定义的插件)
  • 测试改组
  • 没有例外和RTTI

假设CppUnit不支持以上所有内容,我是否正确?是否有一个有用的GoogleTest功能在CppUnit中不可用我缺少?

最后但同样重要的是:GoogleTest 缺少哪些优秀的CppUnit功能?

谢谢!

c++ tdd unit-testing cppunit googletest

63
推荐指数
2
解决办法
3万
查看次数

CppUnit输出到TAP格式转换器

我寻求一个perl模块将CppUnit输出转换为TAP格式.我想在之后使用prove命令来运行并检查测试.

perl junit parsing cppunit

24
推荐指数
1
解决办法
583
查看次数

如何衡量CppUnit测试覆盖率(在win32和Unix上)?

我有一个非常大的代码库,包含大量的单元测试(使用CppUnit).我需要确定这些测试执行的代码百分比,并且(理想情况下)生成某种报告,该报告以每个库或每个文件的形式告诉我,执行了多少代码.

这是踢球者:这必须完全不受限制地运行(最终在持续集成构建中),并且必须是跨平台的(至少WIN32和*nix).

任何人都可以建议一个工具,或一组可以帮助我做到这一点的工具吗?我不能改变CppUnit(我也不想 - 它踢屁股),但除此之外,我很想听到你可能有的任何建议.

干杯,

c++ unit-testing cppunit cross-platform code-coverage

21
推荐指数
2
解决办法
2万
查看次数

使用C++进行测试驱动开发

期待在C++中开始做TDD.我见过CPPUnit,但我想知道是否还有其他选择?

谢谢你的建议!

c++ tdd cppunit

21
推荐指数
3
解决办法
2万
查看次数

C++单元测试库

我遇到了cppunit,但它看起来并不容易使用(也许我看起来并不难,也许是因为C++不能像Java/C#那样工作).有广泛使用的简单替代品吗?

实际上, cppunit是C++的标准单元测试框架吗?

c++ unit-testing cppunit

17
推荐指数
3
解决办法
1万
查看次数

为什么Google Mocks发现此函数调用不明确?

我在尝试开始使用Google Mocks时遇到了一个问题 - 由于某些原因,它无法告诉我在EXPECT_CALL宏中指定的调用,即使类型是一致的.我想知道为什么它不仅仅匹配第一个函数,我需要做什么/添加以使它匹配第一个函数.

模拟类:

class GMockTest : public ITest
{
public:
MOCK_METHOD2(SetParameter,
    int(int nParameter, double value));
MOCK_METHOD2(SetParameter,
    int(int nParameter, int value));
MOCK_METHOD2(SetParameter,
    int(int nParameter, __int64 value));
}
Run Code Online (Sandbox Code Playgroud)

抛出错误的测试代码:

__int64 nFrom = 0,
    nTo = 0;

EXPECT_CALL(mock, SetParameter(2, nFrom))
    .Times(1)
    .WillOnce(Return(0));
EXPECT_CALL(mock, SetParameter(3, nTo))
    .Times(1)
    .WillOnce(Return(0));
Run Code Online (Sandbox Code Playgroud)

编译错误:

test.cpp(1343) : error C2668: GMockTest::gmock_SetParameter' : ambiguous call to overloaded function
        testmocks.h(592): could be 'testing::internal::MockSpec<F> 
 &GMockTest::gmock_SetParameter(const testing::Matcher<T> &,const testing::Matcher<A2> &)
'
        with
        [
            F=int (int,__int64),
            T=int,
            A2=__int64
        ]
        testmocks.h(590): or       'testing::internal::MockSpec<F> …
Run Code Online (Sandbox Code Playgroud)

c++ templates cppunit compilation googlemock

16
推荐指数
2
解决办法
1万
查看次数

单元测试析构函数?

单元测试析构函数有什么好方法吗?就像说我有一个这样的类(人为的)例子:

class X
{
private:
    int *x;

public:
    X()
    {
         x = new int;
    }

    ~X()
    {
         delete x;
    }

    int *getX() {return x;}
    const int *getX() const {return x;}
};
Run Code Online (Sandbox Code Playgroud)

是否有任何好的方法对它进行单元测试以确保x被删除而不会使用#ifdef TEST或破坏封装来混乱我的hpp文件?我看到的主要问题是很难判断x是否真的被删除了,特别是因为在调用析构函数时对象超出了范围.

c++ unit-testing destructor cppunit

15
推荐指数
2
解决办法
1万
查看次数

boost.test与CppUnit

我一直在使用CppUnit已经有一段时间了(我很满意).当我们使用boost库的越来越多的部分时,我对boost.test进行了简短介绍,现在我想知道是否应该在新项目中切换到boost.test.

谁能在这里告诉我两个框架之间的差异以及使用boost.test的好处(如果有的话)?

c++ boost cppunit boost-test

14
推荐指数
2
解决办法
1万
查看次数

CppUnit的多线程实现?

有人能指出我允许在单独的线程中启动测试的CppUnit版本吗?

我们的想法是,因为我们的许多测试都非常重CPU(但不是多线程的,当然,它们是独立的),它可以让我们在今天的多核上更快地运行测试机器.目前,运行所有测试大约需要5分钟.能够将其减少到1或2分钟会很棒......

c++ testing multithreading automated-tests cppunit

13
推荐指数
1
解决办法
2579
查看次数