【发布时间】:2011-12-24 13:35:59
【问题描述】:
我正在尝试改进为 Python 程序编写单元测试用例的方式。我注意到在某些情况下,访问私有成员以确保方法正常运行会非常有帮助。一个示例情况是,尝试测试一个方法是否具有正确的行为,该方法除了 None 之外没有预期的返回值。我知道这样做的简单和错误的方法是将私有属性改为受保护的属性并直接测试它们。但是,我想找到一种不会过多暴露接口的方法。
那么,我如何在不将它们暴露在接口中的情况下测试类中的私有属性,或者,如果适用,如何更好地测试这种场景,以便正确的单元测试不一定需要私有属性访问?
【问题讨论】:
-
什么是 Python 中的“私有”和“受保护”属性?没有这样的东西。
-
这是一个敏感的话题;一些指导方针说,如果它是私有的,则不需要测试!
-
@Sven
_var1和__var2分别是受保护的还是私有的呢? -
我同意@glowcoder,你的单元测试应该只测试你的对象的暴露功能。因此,如果某些东西是隐藏的,那么只有内部方法应该使用它。您(以及您的测试)需要了解(和测试)您的对象的所有内容 - 都是公共属性。
-
有时能够测试类的内部方法很有用,因为从公共方法调用时,正确测试它们的所有路径都太复杂了。但这通常意味着您的课程需要拆分重构为多个较小的位,所以我会和其他人一起去:私有,不要测试。它应该包含在您对公共方法的测试中。
标签: python unit-testing testing tdd access-modifiers