我想在 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
最佳答案
您尝试做的并不是真正的单元测试。 “纯”单元测试旨在测试单个单元(单个类),使用模拟或假对象代替真实依赖;一旦您测试类之间的依赖关系,那就是集成测试,而不是单元测试。
放弃免责声明...
看起来你可以使用 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION创建多个套件,然后按顺序运行每个套件,前提是之前的所有套件都已通过,但您可能需要修改或替换 wxTestRunner 测试运行程序才能执行此操作。
CppUnit 在 Creating TestSuite 上的页面有其他注册测试套件的选项; CPPUNIT_REGISTRY_ADD ,例如,允许您创建套件的层次结构,这应该可以让您对顺序进行一些控制,但我看不出有任何方法可以让一个套件中的失败中止后续测试。
最后,作为一个建议,CppUnit 可能不是目前最好的 C++ 单元测试框架。我个人是 Google Test 的粉丝, 但是 Boost.Test和 UnitTest++也不错。 (This answer 介绍了一个名为 Saru 的个人项目,听起来它可能会给您带来订购测试所需的灵 active 。)
关于c++ - 在 CppUnit 中指定测试依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3073965/