代码之家  ›  专栏  ›  技术社区  ›  Thomas Matthews

在cppUnit中指定测试依赖项?

  •  4
  • Thomas Matthews  · 技术社区  · 15 年前

    我想详细说明CPP单元的测试顺序。根据我的研究,测试顺序取决于编译器或链接器,以及它们是如何访问文件的。

    如何在cppUnit中指定依赖项?

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

    struct Point
    {
      int x;
      int y;
    };
    
    struct Line
    {
      Point a;
      Point b;
    };
    
    struct Rectangle
    {
      Line top;
      Line left;
      Line right;
      Line bottom;
    };
    

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

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

    让我们假设每个类都有一个关联的测试类。每个测试类在单独的文件中都有自己发布的测试方法(注册到CPPUT列表中)。测试线的类不了解点的测试类;与矩形类似。当编译这些测试用例类时,它们的顺序取决于编译器和链接器。

    那么,如何排序测试用例呢?

    仅供参考,我正在使用CPPPUnit、Wxtesturner和Visual Studio 2008

    1 回复  |  直到 15 年前
        1
  •  5
  •   Community CDub    8 年前

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

    有了免责声明…

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

    CPP单位页面 Creating TestSuite 有注册测试套件的其他选项; CPPUNIT_REGISTRY_ADD 例如,允许您创建一个套件层次结构,这样可以让您对排序有一定的控制权,但我看不出一个套件中的失败会以任何方式中止后续测试。

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