C++单元测试框架的比较[关闭]
-
04-07-2019 - |
题
我知道已经有一些关于 C++ 单元测试框架建议的问题,但所有答案都没有帮助,因为它们只是推荐其中一个框架,但没有提供有关(功能)比较的任何信息。
我认为最有趣的框架是 CppUnit、Boost 和新的 Google 测试框架。有人做过比较吗?
解决方案
查看此问题进行一些讨论。
他们推荐文章: 探索C ++单元测试框架丛林,作者:Noel Llopis。 最近的: C ++测试单元框架
我还没有找到一篇将googletest与其他框架进行比较的文章。
其他提示
一位新玩家是 谷歌测试 (也称为 Google C++ 测试框架)这还是相当不错的。
#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
对于子程序循环- 你可以决定 要运行哪些测试
- XML 测试报告生成
- 固定装置 / 嘲笑 / 模板...
升压测试库 是一个非常好的选择,特别是如果您已经在使用 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%
}
它支持:
- 自动的 或手动测试注册
- 许多断言
- 自动比较 收藏品
- 各种输出格式(包括 XML)
- 固定装置 / 模板...
附:我写了一篇关于它的文章,可能会帮助您入门: 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));
}
主要特点:
- 快得令人难以置信:测试运行 同时.
- 便携的
- 自动的 测试注册
- 许多 断言类型(Boost 在 xUnit++ 上没有任何内容)
- 比较 收藏品 原生地。
- 断言进来 三 级别:
- 致命错误
- 非致命错误
- 警告
- 简单的 断言 记录:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
- 测试 记录:
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
- 固定装置
- 数据驱动 测试(理论)
- 选择要运行的测试 基于:
- 属性匹配
- 名称子串匹配
- 测试套件
CppUTest - 非常漂亮,轻量级的框架,带有模拟库。值得仔细看看。
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.
}
}
他们自动注册,所以你不需要更多。然后它就是编译并运行。我发现使用这个框架非常像使用JUnit,对于那些不得不花费一些时间编写Java的人。非常好!
有一些相关的C ++单元测试资源 http://www.progweap.com/resources.html
API 完整性检查器 — C/C++ 库的测试框架:
共享 C/C++ 库的基本单元测试的自动生成器。它能够为参数生成合理的(在大多数情况下,但不幸的是不是全部情况)输入数据,并通过分析标头中的声明为 API 中的每个函数编写简单的(“健全”或“浅薄”质量)测试用例文件。
生成的测试的质量允许检查简单用例中是否存在严重错误。该工具能够构建和执行生成的测试并检测崩溃(段错误)、中止、各种发出的信号、非零程序返回代码和程序挂起。
与 CppUnit、Boost 和 Google Test 相比的独特功能:
- 自动生成测试数据和输入参数(即使对于复杂的数据类型)
- 现代且高度可重用 专门类型 代替固定装置和模板