【问题标题】:Specifying test dependencies in CppUnit?在 CppUnit 中指定测试依赖项?
【发布时间】:2011-03-05 16:13:49
【问题描述】:

我想指定 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 列表中),在单独的文件中。测试 Lines 的类不知道用于点的测试类;和类似的矩形。编译这些测试用例类时,它们的顺序取决于编译器和链接器。

那么,如何对测试用例进行排序?

仅供参考,我正在使用 CppUnit、wxTestRunner 和 Visual Studio 2008

【问题讨论】:

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


    【解决方案1】:

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

    不碍事的免责声明...

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

    Creating TestSuite 上的 CppUnit 页面还有其他注册测试套件的选项;例如,CPPUNIT_REGISTRY_ADD 允许您创建套件的层次结构,这应该可以让您对排序进行一些控制,但我看不出有任何方法可以让一个套件中的失败中止后续测试。

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

    【讨论】:

    • 在很多情况下,我认为您在第一段中所说的那种单元测试在 C++ 中并不实用。为了进行这种测试,您确实必须能够将模拟注入系统,而这对于值类型来说变得非常有问题。在此处的 OP 示例中,我实际上会说这些“类”没有要测试的行为。
    • @Noah:像Google Mock 这样的库有帮助,但你是对的,这是实用性胜过理论纯度的情况。 (OP 确实注意到这是一个非常简化的示例。)
    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 2013-07-17
    • 2016-02-06
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多