C++单元测试库

Mr.*_*Boy 17 c++ unit-testing cppunit

我遇到了cppunit,但它看起来并不容易使用(也许我看起来并不难,也许是因为C++不能像Java/C#那样工作).有广泛使用的简单替代品吗?

实际上, cppunit是C++的标准单元测试框架吗?

Gra*_*erg 21

C++ 没有标准的单元测试库.有很多选择可供选择; cppunit就是其中之一.

在我的公司,我们使用Google Test及其合作伙伴Google Mock进行单元测试和对象模拟.我发现它们结合起来更容易使用,并且比cppunit更强大.


phi*_*red 21

我刚推出了自己的框架,CATCH.它仍在开发中,但我相信它已经超过了大多数其他框架.不同的人有不同的标准,但我试图覆盖大部分地方而没有太多的权衡.看看我的链接博客条目,了解品尝者.我的五大特色是:

  • 仅限标题
  • 自动注册基于功能和方法的测试
  • 将标准C++表达式分解为LHS和RHS(因此您不需要一整套断言宏).
  • 支持基于函数的fixture中的嵌套部分
  • 使用自然语言进行名称测试 - 生成函数/方法名称

它还具有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 );
}
Run Code Online (Sandbox Code Playgroud)

如果测试失败,您仍然可以独立记录LHS和RHS值.

  • [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)看看两者之间有什么不同 (3认同)

dme*_*ter 6

Google Test Framework是另一种选择.

以下是文档中的一个简单示例:

// 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));
}
Run Code Online (Sandbox Code Playgroud)

它还可以与谷歌的C++模拟框架gmock很好地配合使用.