如果它设置了一个类的公共属性,你会单元测试__init__方法吗?

如果它设置了一个类的公共属性,你会单元测试__init__方法吗?

问题描述:

我试图将Sandi Metz的单元测试规则应用于对象的公共端确实有影响的消息,并通过测试公共内容来间接测试所有私有内容。如果它设置了一个类的公共属性,你会单元测试__init__方法吗?

因此,我们避免测试实现,并可以随时更改它。

我的问题是:如果我的__init__方法设置公开可用的实例属性,我应该单元测试它。我基本上不知道如果init应该被视为私有方法(并认为,如果它设置公共的东西,它应该是单元测试)。

例子:

MyClass(object): 

    def __init__(self, public_parameter_1, public_param_2) 

     self.public_parameter_1 = public_parameter_1 
     self.public_parameter_2 = public_parameter_2 

测试使用pytest:

def test_instance(): 

    instance = MyClass(1, 2) 

    assert instance.public_parameter_1 == 1 
    assert instance.public_parameter_2 == 2 

这是一个有点棘手,因为Python并没有真正有私有属性。我想你可以测试所有不以下划线开始的东西,或者你可以测试所有东西,但我通常会限制自己测试需要一些计算或逻辑的东西。在你给的例子中,我不会费心测试这两个简单的作业。

如果你想做某件事来检查你的__init__()方法,你可以使用某种linting工具来检查你在__init__()期间为你的其他方法访问的所有属性都被分配了一个值。这可能比为所有属性编写显式测试更有效。