|
|
1
57
如果这些方法足够复杂,可以单独进行测试,那么将它们重构为自己的类,并通过它们的公共接口进行测试。然后在原始类中私下使用它们。 |
|
|
2
71
而不是讨厌的
但是,最好通过公共接口进行测试。如果您的类X在私有成员函数中有很多代码,那么它可能值得提取一个新的类Y,该类Y由类X的实现使用。然后可以通过它的公共接口测试这个新的类Y,而不必向类X的客户机公开它的使用。 |
|
|
3
59
如果你使用谷歌测试,你可以使用 FRIEND_TEST 轻松地将测试夹具声明为被测试类的朋友。 你知道,如果测试私有函数像其他一些答案所说的那样毫无疑问是糟糕的,那么它可能不会被内置到谷歌测试中。 您可以阅读更多关于测试私有函数好坏的信息。 in this answer . |
|
|
4
29
使测试类成为原始类的朋友。这个朋友声明将在
现在,对于单元测试,您将使用标志编译代码
现在,您的单元测试代码将不会被推送到生产环境中,因为
此外,您不需要任何特殊的库来进行单元测试。 |
|
|
5
11
我知道这是一个古老的问题,但似乎没有人分享过我喜欢的相对好的方法,所以这里是:
更改要测试的方法
下面是一个最小的例子:
当然,您必须更新单元测试才能在派生类而不是基类上运行测试,但是在这之后,对基类所做的任何更改都将自动反映在“测试”类中。 |
|
|
6
5
定义黑客是一个可怕的想法。当你去编译代码时,用预处理器随意地重新编写代码是不明智的。 现在正如一些人已经提到的,您是否应该测试私有方法还存在争议。但这并不包括故意隐藏构造函数以将Instantiaton限制在特定范围内的情况,或者其他一些更为深奥的情况。 而且,你不能在命名空间中建立朋友关系,而“友谊”不是在C++中继承的,所以取决于你的单元测试框架,你可能会遇到麻烦。幸运的是,如果您使用的是boost.test,那么这个问题的优雅解决方案是以fixture的形式出现的。 http://www.boost.org/doc/libs/1_52_0/libs/test/doc/html/utf/user-guide/fixture/per-test-case.html 您可以使这个fixture成为朋友,并让它实例化您在单元测试函数中使用的所有实例,将它们声明为fixture的静态实例和模块范围。如果您使用的是名称空间,不用担心,您可以只声明名称空间内的fixture和名称空间外的测试用例,然后使用scope resolution操作符来获取静态成员。
这个
|
|
|
7
4
很多小时后,我决定这是对那些想要测试其私有功能的人最好的解决方案。这是答案的组合 Max DeLiso 和 MiloÅ¡ . 如果您正在使用 增压:单元测试 然后有一个简单而优雅的解决方案。
这样您就可以自由地使用
|
|
|
8
1
我认为私有方法不需要单元测试用例。 如果方法是私有的,则只能在该类中使用。如果您已经使用这个私有方法测试了所有的公共方法,那么就不需要单独测试它,因为它只在这些许多方面使用。 |