在C ++中,我经常把一个unit testing类作为我正在testing的类的一个朋友。 我这样做是因为我有时觉得需要编写一个私有方法的unit testing,或者我想访问一些私有成员,这样我可以更容易地设置对象的状态,所以我可以testing它。 对我来说,这有助于保持封装和抽象,因为我不修改该类的公共或受保护的接口。 如果我购买第三方库,我不希望它的公共接口受到一些公共方法的污染,我不需要知道,因为供应商想unit testing! 我也不需要担心一群受保护的成员,如果我从一个class级inheritance,我不需要知道这些成员。 这就是为什么我说它保留了抽象和封装。 在我的新工作中,他们甚至对unit testing也不喜欢使用朋友class。 他们说,因为class级不应该“知道”有关testing的任何事情,而且你不希望class级与testing紧密结合。 有人可以向我解释这些原因,以便我可以更好地理解? 我只是不明白为什么使用朋友进行unit testing是不好的。
我一直在阅读C ++常见问题解答 ,并对friend声明感到好奇。 我个人从来没有使用它,但我有兴趣探索的语言。 什么是使用friend的好例子? 再阅读一下FAQ,我喜欢<< >>操作符重载的概念,并将它们添加为这些类的一个朋友。 不过,我不知道这是如何不破坏封装。 什么时候这些exception能够保持在OOP的严格范围之内?