我正在努力改进我为Python程序编写单元测试用例的方法。我注意到在某些情况下,访问私有成员以确保方法正常运行会非常有帮助。一个示例案例是在尝试测试方法以确定没有预期返回值而非None的正确行为时。我知道这样做的简单方法就是将私有属性改为受保护属性,并直接测试它们。但是,我想找到一种不会暴露界面的方法。
那么我如何测试类中的私有属性而不在接口中公开它们,或者,如果适用的话,更好的方法是测试这样的场景,以便正确的单元测试不一定需要私有属性访问?
答案 0 :(得分:20)
Python中没有任何内容。如果在成员变量上使用双下划线前缀,则名称将被简化。您可以通过在_Class__member
表单中限定名称来访问它。这将访问班级__member
中的Class
变量。
另请参阅此问题:Why are Python's 'private' methods not actually private?
答案 1 :(得分:4)
我会朝不同的方向走......
尝试编写断言私有状态的公共行为的单元测试。让我们假设您调用修改内部状态的void方法A()。现在,如果调用该方法并且状态确实发生了变化,那么在您的小代码世界中将会有一些可观察到的变化。也许B()现在表现不同。所以我的测试将是......(使例子无足轻重)
void MyTest()
{
Assert.That(B(), Is.False);
A();
Assert.That(B(), Is.True);
}
在测试和SUT之间避免Inappropriate Intimacy。