c++ - CPPUNIT:共同基础测试

标签 c++ unit-testing visual-studio-2008 cppunit

我想知道测试基类的有效设计或实现。
举个例子:

class Polygon;
class Rectangle : public Polygon;
class Triangle : public Polygon;

其中 RectangleTriangle 继承自 Polygon

我想让 RectangleTriangle 的测试类使用一个基础测试类:

class Test_Rectangle : public CppUnit::TestFixture;
class Test_Triangle : public CppUnit::TestFixture;

但我不知道 class Test_Polygon 是否应该继承自 CppUnit::TestFixture

我目前的计划是: 类测试多边形; 类 Test_Rectangle:公共(public) Test_Polygon,公共(public) CppUnit::TestFixture; 类 Test_Triangle : public Test_Polygon, public CppUnit::TestFixture;

上述计划的问题在于 Test_Polygon 无法使用 CPPUNIT_ASSERT,其方法也不会列在 CPPUNIT 注册表中。

那么使用 CPPUNIT 测试基类和后代的推荐层次结构是什么?

(我在 Windows Vista 上使用 CPPUNIT 1.12 和 Visual Studio 2008。)

最佳答案

我认为答案取决于 Polygon 是否是虚拟基类。如果它是虚拟的,那么我会把它当作一个“私有(private)”类,我不会直接测试它,也根本不需要 Test_Polygon。对每个子类进行单元测试应提供有关其是否正常运行的所有信息。

如果您正在测试在基类中实现的方法,您可以从任何未覆盖它的类中对其进行测试。如果它是从子类中调用的方法,例如 Rectangle::SetSideLen(int len) { return Polygon::SetSideLen(len); }; 那么测试应该通过在 Test_Rectangle 中测试 testRectangle.SetSideLen() 来完成。如果您没有不覆盖它的类,那么您的基类本质上是无法访问的代码,可能应该被删除。

如果您实际上可以实例化一个独立的多边形,那么我会将其视为“公共(public)”,因此我会让 Test_Polygon 继承自 TestFixture 以测试这些公共(public)方法。

关于c++ - CPPUNIT:共同基础测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579098/

相关文章:

c++ - C++ 多线程 : detach non-class type error

c++ - Char 数组和 uintptr_t

.net - Visual Studio 调试器在网站根目录下未附加

c++ - 'NSFontManager' 没有可见的@interface 声明选择器 'fontpanel:'

c++ - 非虚拟析构函数c++的异常

unit-testing - 如何测试 QueryDsl 谓词

javascript - MochaJS setTimeout ES6

python - 在 Python 的测试包中运行单元测试

c++ - 如何在 C++ 中为前向声明类型实现一元运算符重载?

visual-studio-2008 - 为什么我的 visual studio 2008 项目是只读的