C+中的单元和集成测试+; 我将在C++中编写一个相当大的应用程序。到目前为止,我已经非常习惯于使用JUnit和RSpec在Java和Ruby中使用TDD

C+中的单元和集成测试+; 我将在C++中编写一个相当大的应用程序。到目前为止,我已经非常习惯于使用JUnit和RSpec在Java和Ruby中使用TDD,c++,unit-testing,testing,C++,Unit Testing,Testing,但就我的经验而言,我从未见过任何带有测试套件的C/C++项目 强>你推荐在C++中测试什么库? BR> C++中有没有好的嘲讽/破译框架? < /p> 实际上,我使用的是NetBeans IDE,似乎不支持任何测试。 C++中TDD的推荐工具有哪些?>/P> 甚至可以用C++来实现TDD吗?编译时间在我看来是一个很大的缺点。 C++有很多单元测试框架。我最有经验的两个是CppUnit和cxtest。我更喜欢CxxTest,因为我发现不必像使用CPPFUnit那样显式注册测试用例更容易。Cx

但就我的经验而言,我从未见过任何带有测试套件的C/C++项目

<>强>你推荐在C++中测试什么库?<强> BR> <强> C++中有没有好的嘲讽/破译框架?<强> < /p> 实际上,我使用的是NetBeans IDE,似乎不支持任何测试。
<强> C++中TDD的推荐工具有哪些?>/P>

甚至可以用C++来实现TDD吗?编译时间在我看来是一个很大的缺点。

C++有很多单元测试框架。我最有经验的两个是CppUnit和cxtest。我更喜欢CxxTest,因为我发现不必像使用CPPFUnit那样显式注册测试用例更容易。CxxTest有一个eclipse插件,但我不知道是否有一个用于NetBeans的插件。编译时间不应该是一个写得很好的C++问题,也不是一个跳过单元测试/TDD的原因。


对于验收测试,我使用了exactor。这是一个基于java的工具,但C++环境下使用并不困难。p> 为您提供单元测试等。

我们使用。我们不会在开发人员机器上的每个编译上运行测试。这是一个构建服务器的工作。

< P>用于集成测试,我可以建议C++的实现FIT(集成测试框架)-AKA CEFIT(),在撰写本文时CEEFIT站点已经下降。希望它很快就会回来。我个人使用CEFIT来运行与计算机辅助设计平台API(SolidWorks,如果您知道它)交互的传统C++代码库的集成测试。我很幸运,CEEFIT是开源的,因为我必须扩展它来做定制的事情,比如读取多个表作为输入(默认行为是为一个测试类读取一个表)。在与CEEFIT合作至少一年之后,我相对有信心可以使用此工具在大多数系统上运行集成测试

无耻的插件-我的一些博客文章讲述了我使用CEEFIT下载的经历


不过,CEEFIT有几个注意事项——通过表格格式提供输入并不总是可行的(这不是CEEFIT的错误,这是由FIT设计的,CEEFIT只是实现了FIT)。源代码已经很多年没有更新了,如果内存正常的话(因为网站关闭了),从2005年开始(但是自从开源以来,这并没有给我的工作带来太多问题)。

无耻的插件:看看和。

如果你曾经使用JUnit和jMock,我想推荐你:

GooglemockGoogletest无缝合作

对于TDD,我自己使用


用我自己写的一些剧本。所有这些工作都很好。

unittest++

既然您已经在JUnit上工作过,那么您就可以很容易地在CPPFUnit上工作了

比较CppTest和CPPFUnit,我将使用CppTest。CppTest具有较少的隐藏框架,IMO更易于理解和实现。我个人喜欢看到主要的切入点。我还介绍了Boost单元测试框架。它不是基于。我不是一个粉丝,但是如果你已经在使用Boost库,那么合并它会很好


CppTest与CPPFUnit的对比

易于创建单元测试和测试 套件。CppUnit和CppTest都可以创建 类方法的单元测试 类本身派生自一些 工具提供的测试类。语法 因为CppTest稍微简单一点, 不过,随着考试的报名 发生在课堂上 构造器。在CPPFUnit的情况下, 附加宏 单元测试套件和 需要单元测试套件终端

运行测试。简单测试 对测试调用run方法 套件,而CPPFUnit使用单独的 运行方法为的TestRunner类 调用以运行测试

扩展测试层次结构。在里面 CppTest的情况总是如此 可以扩展上一个测试 通过创建一个 继承自旧的。新的 类将定义一些额外的 添加到单元测试的函数 水塘您只需调用run方法 在新类类型的对象上。 相反,CPPFUnit要求 您可以使用宏 CPPU单元测试子套件以及 类继承来实现相同的功能 效果

生成格式化输出。二者都 CppTest和CPPFUNIT具备以下能力 自定义输出。然而, 虽然CppTest有一个有用的, 预定义的HTML输出格式化程序, CPPUT没有。然而,该股 专门支持XML格式。 两者都支持文本和编译器样式 格式

创建测试夹具。使用测试 装置,CPPFUnit要求 测试类可以派生自 CppUnit::TestFixture。你必须提供 设置和设置的定义 打破常规。就 CppTest,您需要提供 定义仅适用于设置和 打破常规。这绝对是 更好的解决方案,因为它保持了 客户端代码简单。•预定义的 实用程序宏支持。两种测试 和CPPFUnit有一组可比较的 用于资产、处理浮动的宏, 等等

头文件。CppTest要求 包含一个头文件, 而CPPUT客户端代码必须包括 多个标题,如HelperMacros.h 和TextTestRunner.h,具体取决于 使用的功能


CPPTEST

#include “cppTest.h”

class myTestWithFixtures : public Test::Suite { 
  void function1_to_test_some_code( );
  void function2_to_test_some_code( );

  public: 
  myTestWithFixtures ( ) { 
      TEST_ADD (function1_to_test_some_code) {...}; 
      TEST_ADD (function2_to_test_some_code) {...}; 
  } 

  protected: 
    virtual void setup( ) { ... };
    virtual void tear_down( ) { ... };
}; 

int main ( ) 
{ 
  myTestWithFixtures tests; 
  Test::TextOutput output(Test::TextOutput::Verbose);
  return tests.run(output);
} 
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TextTestRunner.h>
#include <cppunit/extensions/HelperMacros.h>

class mystringTest : public CppUnit::TestFixture {
public:
  void setUp() { ... };
  void tearDown() { ... };

  void function1_to_test_some_code() { ... };
  void function2_to_test_some_code() { ... };

  CPPUNIT_TEST_SUITE( mystringTest );
  CPPUNIT_TEST( function1_to_test_some_code );
  CPPUNIT_TEST( function2_to_test_some_code );
  CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION( mystringTest );


CPPUNIT

#include “cppTest.h”

class myTestWithFixtures : public Test::Suite { 
  void function1_to_test_some_code( );
  void function2_to_test_some_code( );

  public: 
  myTestWithFixtures ( ) { 
      TEST_ADD (function1_to_test_some_code) {...}; 
      TEST_ADD (function2_to_test_some_code) {...}; 
  } 

  protected: 
    virtual void setup( ) { ... };
    virtual void tear_down( ) { ... };
}; 

int main ( ) 
{ 
  myTestWithFixtures tests; 
  Test::TextOutput output(Test::TextOutput::Verbose);
  return tests.run(output);
} 
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TextTestRunner.h>
#include <cppunit/extensions/HelperMacros.h>

class mystringTest : public CppUnit::TestFixture {
public:
  void setUp() { ... };
  void tearDown() { ... };

  void function1_to_test_some_code() { ... };
  void function2_to_test_some_code() { ... };

  CPPUNIT_TEST_SUITE( mystringTest );
  CPPUNIT_TEST( function1_to_test_some_code );
  CPPUNIT_TEST( function2_to_test_some_code );
  CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION( mystringTest );
#包括
#包括
#包括
类mystringTest:公共CppUni