我想在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
答案 0 :(得分:5)
你要做的不是真正的单元测试。 “纯粹”单元测试旨在测试单个单元(单个类),使用模拟或虚假对象代替真正的依赖;一旦你测试了类之间的依赖关系,那就是集成测试,而不是单元测试。
将该免责声明排除在外......
看起来您可能可以使用CPPUNIT_TEST_SUITE_NAMED_REGISTRATION创建多个套件,然后按顺序运行每个套件,前提是所有以前的套件都已通过,但您可能需要修改或替换wxTestRunner测试运行器才能执行此操作此
Creating TestSuite上的CppUnit页面还有其他注册测试套件的选项;例如,CPPUNIT_REGISTRY_ADD允许您创建套件层次结构,这可以让您对排序有一些控制权,但我没有看到任何方法导致一个套件中的故障中止后续测试。
最后,作为一个建议,CppUnit可能不是最好的C ++单元测试框架。我个人是Google Test的粉丝,但Boost.Test和UnitTest++也很好。 (This answer引入了一个名为Saru的个人项目,听起来它可能会为您提供订购测试所需的灵活性。)