我知道这是一个有争议的做法,但是让我们假设这对我来说是最佳选择。我想知道执行此操作的实际技术是什么。我看到的方法是这样的:
1)与我要测试的方法的班级做一个朋友班。
2)在friend类中,创建一个公共方法,该公共方法调用被测试类的私有方法。
3)测试好友类的公共方法。
这是一个简单的示例来说明上述步骤:
#include <iostream>
class MyClass
{
friend class MyFriend; // Step 1
private:
int plus_two(int a)
{
return a + 2;
}
};
class MyFriend
{
public:
MyFriend(MyClass *mc_ptr_1)
{
MyClass *mc_ptr = mc_ptr_1;
}
int plus_two(int a) // Step 2
{
return mc_ptr->plus_two(a);
}
private:
MyClass *mc_ptr;
};
int main()
{
MyClass mc;
MyFriend mf(&mc);
if (mf.plus_two(3) == 5) // Step 3
{
std::cout << "Passed" << std::endl;
}
else
{
std::cout << "Failed " << std::endl;
}
return 0;
}
编辑:
我看到在讨论中,有人对我的代码库感到疑惑,而在下面的答案之一中。
我的课有被其他方法调用的方法。这些方法都不应该在类外部调用,因此它们应该是私有的。当然,可以将它们放在一种方法中,但是从逻辑上讲,它们要好得多。这些方法非常复杂,需要进行单元测试,并且由于性能问题,我很可能必须重构这些方法,因此最好进行测试以确保重构不会破坏任何东西。我不是唯一在团队中工作的人,尽管我是唯一致力于这个项目(包括测试)的人。
综上所述,我的问题不是关于为私有方法编写单元测试是否是一种好习惯,尽管我很感谢反馈。