我遇到了cppunit,但它看起来并不容易使用(也许我看起来并不难,也许是因为C ++不像Java / C#那样工作)。是否有广泛使用的简单替代品?
事实上,是 cppunit C ++的标准单元测试框架?
答案 0 :(得分:21)
C ++没有标准单元测试库。有很多选择可供选择; cppunit就是其中之一。
在我公司,我们使用Google Test及其合作伙伴Google Mock进行单元测试和对象模拟。我发现它们结合起来更容易使用,并且比cppunit更强大。
答案 1 :(得分:21)
我刚刚推出了自己的框架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值。
答案 2 :(得分:6)
Google Test框架是另一种选择。
以下是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));
}
它还可以与Google的C ++模拟框架gmock很好地配合使用。
答案 3 :(得分:2)
CppUnit可能是C ++的第一个单元测试框架。它是着名的Java框架Junit的直接端口。这使得从Junit过渡更容易,但是以一个有点繁重的框架为代价,却没有利用诸如RAII之类的C ++功能。这就是为什么创建了CppUnitLite,NanoCppUnit等轻量级版本的原因。除了其他改进之外,CppUnit2应该改进这一点。
Tut曾经很轻,只有一个标题,但最新版本引入了一个库。
就“标准”框架而言,没有,C ++ 1X没有定义。
答案 4 :(得分:2)
我为自己的代码开发人员创建了一个名为saru(http://github.com/mikeando/saru)的测试套件。它是BSD许可代码。我开发它,因为我不喜欢其他测试套件的几个功能。它没有被广泛使用,但我已经将它用于分布在两家公司的几个商业项目中。
所以saru解决了大部分这些功能。 它的重点是能够运行一套用不同语言编写的测试。 最小的测试尺寸。这是最小的(失败的)C ++测试
//SARU : dummy dummy
int main() { return (1==2)?0:1; }
所有saru真正关心的是它编译的二进制文件的返回值。 然后它解析输出以确定哪些测试失败等等。它有标题使得使用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 ++标头的工作方式,它应该能够以最小的难度与其他单元测试库集成。
但它也将运行用PHP和PHP编写的测试。蟒蛇。 所以你可以用saru设置全功能测试。或者,您可以在代码中运行类似于lint的内容作为测试套件的一部分。
答案 5 :(得分:1)
这是一个最小的C ++单元测试库: https://github.com/vahidk/minimal-cpp-test
它与Google测试库的语法非常相似,但它只是一个标题库,因此更容易跨平台移植。
这是一个最小的单元测试:
#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);
}
希望这有帮助。
答案 6 :(得分:1)
这是一个单独的头文件,仅包含C ++单元测试的解决方案: https://gitlab.com/cppocl/unit_test_framework
在这里使用它的简单示例,但它也有固定装置(设置和拆卸),内存泄漏失败测试,性能失败测试(我在其他任何地方都没有看到此功能)。
#include "test/Test.hpp"
TEST(MyTest)
{
int a = 1;
int b = 2;
CHECK_EQUAL(a + b, 3);
}
答案 7 :(得分:0)
以下是单元测试库的列表。
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
但据我所知,cppunit是最受欢迎的。