我知道关于C ++单元测试框架的建议已经存在一些问题,但是所有答案都无济于事,因为他们只是推荐了其中一种框架,但没有提供有关(功能)比较的任何信息。
我认为最有趣的框架是CppUnit,Boost和新的Google测试框架。有人做过比较吗?
我知道关于C ++单元测试框架的建议已经存在一些问题,但是所有答案都无济于事,因为他们只是推荐了其中一种框架,但没有提供有关(功能)比较的任何信息。
我认为最有趣的框架是CppUnit,Boost和新的Google测试框架。有人做过比较吗?
Answers:
请参阅此问题进行一些讨论。
他们推荐以下文章: Noel Llopis的“ 探索C ++单元测试框架Jungle”。以及更新的版本:C ++测试单元框架
我还没有找到将googletest与其他框架进行比较的文章。
新的播放器是Google Test(也称为Google C ++ Testing Framework),它非常不错。
#include <gtest/gtest.h>
TEST(MyTestSuitName, MyTestCaseName) {
int actual = 1;
EXPECT_GT(actual, 0);
EXPECT_EQ(1, actual) << "Should be equal to one";
}
主要特点:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
SCOPED_TRACE
用于子程序循环我刚刚推出了自己的框架CATCH。它仍在开发中,但我相信它已经超越了大多数其他框架。不同的人有不同的标准,但我试图在没有太多取舍的情况下涵盖大多数领域。看看我的品酒师链接博客条目。我的五个主要功能是:
它还具有Objective-C绑定。该项目托管在Github上
CHECK_FLASE
和REQUIRE_FLASE
宏。
Boost测试库是一个很好的选择,特别是如果您已经在使用Boost。
// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(MyTestCase)
{
// To simplify this example test, let's suppose we'll test 'float'.
// Some test are stupid, but all should pass.
float x = 9.5f;
BOOST_CHECK(x != 0.0f);
BOOST_CHECK_EQUAL((int)x, 9);
BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}
它支持:
PS:我写了一篇有关它的文章,可能会帮助您入门:C ++单元测试框架:Boost测试教程
我最近发布了xUnit ++,专门作为Google Test和Boost Test Library的替代(查看比较)。如果您熟悉xUnit.Net,就可以使用xUnit ++。
#include "xUnit++/xUnit++.h"
FACT("Foo and Blah should always return the same value")
{
Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\".";
Assert.Equal(Foo(), Blah());
}
THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected),
std::make_tuple(0, "0"),
std::make_tuple(1, "1"),
std::make_tuple(2, "2"))
{
Assert.Equal(expected, Foo(input));
}
主要特点:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
CPUnit(http://cpunit.sourceforge.net)是一个类似于Google Test的框架,但是它依赖于较少的macOS(断言是函数),并且对宏进行了前缀以避免常规的宏陷阱。测试如下:
#include <cpunit>
namespace MyAssetTest {
using namespace cpunit;
CPUNIT_FUNC(MyAssetTest, test_stuff) {
int some_value = 42;
assert_equals("Wrong value!", 666, some_value);
}
// Fixtures go as follows:
CPUNIT_SET_UP(MyAssetTest) {
// Setting up suite here...
// And the same goes for tear-down.
}
}
它们会自动注册,因此您只需要这些即可。然后,它只是编译并运行。对于那些不得不花一些时间对Java进行编程的人,我发现使用此框架非常类似于使用JUnit。非常好!
http://www.progweap.com/resources.html上有一些相关的C ++单元测试资源 。
API Sanity Checker — C / C ++库的测试框架:
共享的C / C ++库的基本单元测试的自动生成器。通过分析标头中的声明,它能够为参数生成合理的(在大多数情况下,但不是所有情况下)输入数据,并为API中的每个函数编写简单的(“合理”或“浅”质量)测试用例。文件。
生成的测试的质量允许检查简单用例中是否存在严重错误。该工具能够构建和执行生成的测试,并检测崩溃(段错误),异常终止,各种发出的信号,非零程序返回代码和程序挂起。
与CppUnit,Boost和Google Test相比的独特功能: