我遇到过cppunit,但它看起来并不太容易使用(也许我没有看起来很难,也许是因为C++不像Java/C#那样工作)。有广泛使用,简单的替代品吗?C++单元测试库
其实是 cppunit是C++的标准单元测试框架吗?
我遇到过cppunit,但它看起来并不太容易使用(也许我没有看起来很难,也许是因为C++不像Java/C#那样工作)。有广泛使用,简单的替代品吗?C++单元测试库
其实是 cppunit是C++的标准单元测试框架吗?
没有标准 C++的单元测试库。有许多选择可供选择; cppunit就是其中之一。
在我的公司,我们使用Google Test及其合作伙伴Google Mock进行单元测试和对象嘲弄。我发现它们结合起来更容易使用,而且比cppunit更强大。
+1酷,我不知道这些存在。 –
只是好奇,做Eclipse和哈德森的“胜利”谷歌? – Mawg
它能够将输出写入xml文件,遵循与JUnit具有相同架构的标记--gtest_output =“xml:_path_to_output_file_”。它适用于Windows,Mac和Ubuntu上的hudson。我不能说日食,虽然我们不使用它。 –
这是一个单元测试库列表。
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
不过,据我所知,CppUnit的是最流行的。
gtest,谷歌的测试框架是一种替代方案。
下面是从documentation一个简单的例子:
// Tests factorial of 0.
TEST(FactorialTest, HandlesZeroInput) {
EXPECT_EQ(1, Factorial(0));
}
// Tests factorial of positive numbers.
TEST(FactorialTest, HandlesPositiveInput) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}
它还gmock,谷歌的模拟框架,很好地发挥了C++
我给出了一个例子,说明如何在我的答案中在我自己的框架CATCH中编写这些测试的等价物。 – philsquared
CppUnit的可能是对C的第一单元测试框架++。它是着名的Java框架Junit的直接端口。这使得从Junit过渡起来更容易,但是以一个有点沉重的框架为代价,它没有利用C++的能力,比如RAII。这就是为什么轻量级版本如CppUnitLite,NanoCppUnit已经创建的原因。除此之外,CppUnit2应该改进这一点。
Tut过去很轻,只有一个标题,但最新版本引入了一个库。
就“标准”框架而言,没有,而C++ 1X没有定义一个框架。
我为我自己的代码开发者创建了一个名为saru的测试套件(http://github.com/squishyhumans/saru)。它是一个BSD授权代码。我开发它是因为我不喜欢其他测试套件的几个功能。它没有被广泛使用,但是我已经将它用于跨两家公司的几个商业项目。
所以萨鲁解决大部分的系统这些功能。 它的重点是能够运行一套写在 不同的语言。用最少的试验规模测试。下面是最小的(失败的)C++测试
//SARU : dummy dummy
int main() { return (1==2)?0:1; }
所有萨鲁法尔真正关心阿布t是编译的二进制文件的返回值。 然后它分析输出以确定哪些测试失败等等。它有头,以与C++比上面的简单的例子,更好一点的工作:
//SARU : dummy dummy
#include "MyStruct.h"
#include "saru_cxx.h"
class Fixture
{
MyStruct s_;
Fixture() : s_() {}
void test_A_is_B()
{
SARU_ASSERT_EQUAL(s_.A(), s_.B());
}
void test_C_is_7()
{
SARU_ASSERT_EQUAL(7, s_.C());
}
};
int main()
{
saru::TestLogger logger;
SARU_TEST(Fixture:: test_A_is_B, logger);
SARU_TEST(Fixture:: test_C_is_7, logger);
logger.printSummary();
return logger.allOK()?0:1;
}
或者,如果你不喜欢它的C++头工作,它应该能够与最小的困难等单元测试库集成的方式。
但它也会运行python编写的PHP &测试。 所以你可以用saru进行全功能测试。或者你可以在你的代码上运行一些像lint一样的测试套件。
我刚推出我自己的框架,CATCH,在那里。它仍在开发中,但我相信它已经超越了大多数其他框架。 不同的人有不同的标准,但我试图覆盖大部分地面,没有太多的权衡。 看看我的链接的博客条目品尝师。我的五大特点是:
它还具有Objective-C的绑定。
举个例子,这里是你会怎么写@dmeister引GTEST例子的等效:
TEST_CASE("Factorial/Handles zero input", "Tests factorial of 0.")
{
REQUIRE(Factorial(0) == 1);
}
TEST_CASE("Factorial/Handles positive input", "Tests factorial of positive numbers.")
{
REQUIRE(Factorial(1) == 1);
REQUIRE(Factorial(2) == 2);
REQUIRE(Factorial(3) == 6);
REQUIRE(Factorial(8) == 40320);
}
如果测试失败,你还是会得到LHS和RHS值independentaly记录。
[doctest](https://github.com/onqtam/doctest)是我在重新编译Catch时着重于编译速度 - 查看[FAQ](https://github.com/onqtam/doctest/blob/ master/doc/markdown/faq.md#how-is-doctest-different-from-catch)看看两者有什么不同 – onqtam
这里有一个最小的C++单元测试库: https://github.com/vahidk/minimal-cpp-test
它具有非常相似的语法来谷歌测试库,但它只是库,所以跨平台更容易端口头。
这里有一个最小的单元测试:
#define DEFINE_TEST_MAIN
#include "test.h"
TEST(GroupName, TestName) {
EXPECT_EQ(1 + 2, 3);
}
和最小夹具:
class ClassName : public cyrus:Test {
public:
void Setup() override {
x = 5;
}
int x;
}
Test_F(ClassName, Test1) {
EXPECT_EQ(x, 5);
}
希望这有助于。
你想支持模拟对象吗? –
相关:http://stackoverflow.com/questions/91384/unit-testing-for-c-code-tools-and-methodology http://stackoverflow.com/questions/13699/choosing-ac-unit-testing-工具框架http://stackoverflow.com/questions/3150/how-to-set-up-unit-testing-for-visual-studio-c http://stackoverflow.com/questions/387272/unit-testing- in-c和可能其他 –
重复http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks – dmckee