如果它设置了类的公共属性,你是否单元测试__init__方法?

时间:2017-10-17 09:01:20

标签: python unit-testing initialization

我正在尝试将Sandi Metz的单元测试规则应用于真正影响对象公共方面的消息,并通过测试公共内容来间接测试所有私有内容。

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

我的问题是:如果我的__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

1 个答案:

答案 0 :(得分:1)

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

如果您想要检查__init__()方法,可以使用某种linting工具检查您在其他方法中访问的所有属性是否在__init__()期间分配了值。这可能比为所有属性编写显式测试更有效。