3

我想生成一个测试用例,它断言虚拟方法满足所有子类的某些属性。我怎样才能自动化呢?

class A {
 virtual int foo() = 0;
};

class B : public A {
 virtual int foo() override;
};

class C : public A {
 virtual int foo() override;
};

我想做类似的事情(我知道下面的语法是垃圾)

for (A : SUBCLASSES_OF(A))
{
  A a;
  assert(a.foo() == 42);
}

这甚至可以通过增强/模板元编程/宏魔法实现,还是我在这里推理时犯了一个巨大的错误?

4

4 回答 4

2

访客呢?请参阅Vistor 设计模式。此外,这个答案可能很有帮助访客模式如何避免向下转换

于 2013-02-22T15:57:46.127 回答
2

那是不可能的。考虑到当你编译你想要的代码时,扩展给定基础的类集可能是未知的。特别是,在您的翻译单元编译后,没有什么会阻止您或任何其他开发人员添加新类,现在您的翻译的“编译时间”和整个项目的“编译时间”将是不同的时间。

更好的问题是你真正想解决什么?

于 2013-02-22T16:00:40.157 回答
0

http://www.gccxml.org/HTML/Running.html 会有帮助吗?我知道一位同事多年前使用它来生成代码。

我还知道有人利用 Doxygen 的 Xml 输出。

于 2013-02-22T17:22:05.717 回答
0

我认为可行的解决方案可能是编写一个脚本(例如在 python 中)扫描您的目录并为您生成带有测试用例的 C++ 源代码。我认为 C++ 本身没有办法做到这一点(不使用特定编译器/平台可能提供的非标准扩展)。

于 2013-02-22T16:04:12.093 回答