在Qt中是否可以对单元测试(访问)私有方法进行单元测试?

xx7*_*aBs 3 qt unit-testing class private-members metaobject

我正在为我的应用程序编写单元测试,现在我偶然发现了一个我应该测试私有方法的类.这可能是特定班级设计不佳的结果,但我必须这样做.有没有办法在Qt中调用私有方法,可能使用QMetaObject或类似的东西?

对于单元测试,我使用的是QTestLib框架.

cwa*_*ole 5

正确的(读令人讨厌的)答案是你不应该测试私有方法,那些是实现细节;-).

OTOH - 您是否考虑过有条件地声明它们是受保护的/私有的,这取决于您是在测试还是没有然后扩展?我过去常常用它来解决类似的问题.

#ifdef TESTING
// or maybe even public!
#define ACCESS protected
#else
#define ACCESS private
#endif

/* your class here */
class Foo {
ACCESS
    int fooeyness;
}

// or better yet, place this in a different file!
#ifdef TESTING
/*
    class which extends the tested class which has public accessors
*/
#endif
Run Code Online (Sandbox Code Playgroud)

  • @larsm那......是邪恶的. (4认同)
  • 甚至更脏:`#define private public`在你'#include'标题之前. (3认同)
  • @larsm ......三年后,这仍然是邪恶的.只是想我会指出这一点.认真.这让我很畏缩. (3认同)