我知道关于C++单元测试框架的建议已经存在一些问题,但所有答案都没有帮助,因为他们只是推荐其中一个框架,但没有提供有关(特征)比较的任何信息.
我认为最有趣的框架是CppUnit,Boost和新的Google测试框架.有人做过任何比较吗?
在为接下来的几年设置我们的C++单元测试框架的过程中,我们将GoogleTest和CppUnit列入了候选名单.我对两者都有一些经验,而我的偏好是GoogleTest.无论如何要说服我的老板我需要一些事实,所以我在互联网上做了一些阅读,包括手册,维基页面和一些来源.我想出了一个GoogleTest优势列表和一个CppUnit优势(图形测试跑步者).在这里,他们按照感知有用性排序:
假设CppUnit不支持以上所有内容,我是否正确?是否有一个有用的GoogleTest功能在CppUnit中不可用我缺少?
最后但同样重要的是:GoogleTest 缺少哪些优秀的CppUnit功能?
谢谢!
我寻求一个perl模块将CppUnit输出转换为TAP格式.我想在之后使用prove命令来运行并检查测试.
我有一个非常大的代码库,包含大量的单元测试(使用CppUnit).我需要确定这些测试执行的代码百分比,并且(理想情况下)生成某种报告,该报告以每个库或每个文件的形式告诉我,执行了多少代码.
这是踢球者:这必须完全不受限制地运行(最终在持续集成构建中),并且必须是跨平台的(至少WIN32和*nix).
任何人都可以建议一个工具,或一组可以帮助我做到这一点的工具吗?我不能改变CppUnit(我也不想 - 它踢屁股),但除此之外,我很想听到你可能有的任何建议.
干杯,
我遇到了cppunit,但它看起来并不容易使用(也许我看起来并不难,也许是因为C++不能像Java/C#那样工作).有广泛使用的简单替代品吗?
实际上,是 cppunit是C++的标准单元测试框架吗?
我在尝试开始使用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) 单元测试析构函数有什么好方法吗?就像说我有一个这样的类(人为的)例子:
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是否真的被删除了,特别是因为在调用析构函数时对象超出了范围.
我一直在使用CppUnit已经有一段时间了(我很满意).当我们使用boost库的越来越多的部分时,我对boost.test进行了简短介绍,现在我想知道是否应该在新项目中切换到boost.test.
谁能在这里告诉我两个框架之间的差异以及使用boost.test的好处(如果有的话)?
有人能指出我允许在单独的线程中启动测试的CppUnit版本吗?
我们的想法是,因为我们的许多测试都非常重CPU(但不是多线程的,当然,它们是独立的),它可以让我们在今天的多核上更快地运行测试机器.目前,运行所有测试大约需要5分钟.能够将其减少到1或2分钟会很棒......
cppunit ×10
c++ ×9
unit-testing ×5
boost-test ×2
googletest ×2
tdd ×2
boost ×1
compilation ×1
destructor ×1
googlemock ×1
junit ×1
parsing ×1
perl ×1
templates ×1
testing ×1