在CppUnit中指定测试依赖项?

时间:2010-06-19 01:22:30

标签: c++ visual-studio-2008 wxwidgets cppunit

我想在CppUnit中指定测试顺序。根据我的研究,测试顺序取决于编译器或链接器以及它们如何遇到文件。

如何在CppUnit中指定依赖项?

例如,让我们考虑一个有四行的矩形类。每行包含两个点类。假设每个类都在一个单独的模块或翻译单元中。

struct Point
{
  int x;
  int y;
};

struct Line
{
  Point a;
  Point b;
};

struct Rectangle
{
  Line top;
  Line left;
  Line right;
  Line bottom;
};

在上面的代码中,应首先测试Point类,然后测试Line类,最后测试Rectangle类。如果Line或Point类有问题,没有理由测试Rectangle类。 这是一个非常简单的例子。

对于复合类,应首先测试内部类或成员数据类型类。

让我们假设每个类都有一个相关的测试类。每个测试类都有自己发布的测试方法(已注册到CppUnit列表),位于单独的文件中。测试行的类不知道点的测试类;和矩形类似。编译这些测试用例类时,它们的顺序取决于编译器和链接器。

那么,如何订购测试用例?

仅供参考,我使用的是CppUnit,wxTestRunner和Visual Studio 2008

1 个答案:

答案 0 :(得分:5)

你要做的不是真正的单元测试。 “纯粹”单元测试旨在测试单个单元(单个类),使用模拟或虚假对象代替真正的依赖;一旦你测试了类之间的依赖关系,那就是集成测试,而不是单元测试。

将该免责声明排除在外......

看起来您可能可以使用CPPUNIT_TEST_SUITE_NAMED_REGISTRATION创建多个套件,然后按顺序运行每个套件,前提是所有以前的套件都已通过,但您可能需要修改或替换wxTestRunner测试运行器才能执行此操作此

Creating TestSuite上的CppUnit页面还有其他注册测试套件的选项;例如,CPPUNIT_REGISTRY_ADD允许您创建套件层次结构,这可以让您对排序有一些控制权,但我没有看到任何方法导致一个套件中的故障中止后续测试。

最后,作为一个建议,CppUnit可能不是最好的C ++单元测试框架。我个人是Google Test的粉丝,但Boost.TestUnitTest++也很好。 (This answer引入了一个名为Saru的个人项目,听起来它可能会为您提供订购测试所需的灵活性。)