2017-10-17 3 views
0

私はSandi Metzのユニットテストのルールを、実際にオブジェクトの公開側に影響を与えるメッセージだけに適用しようとしており、パブリックなものをテストすることによってすべてのプライベートなものを間接的にテストしています。クラスのパブリック属性を設定する場合は、unit test __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 

答えて

1

Pythonは本当にプライベートな属性を持っていないので、それは少しトリッキーです。アンダースコアで始まらないものをテストできるか、すべてをテストすることができますが、通常は計算やロジックが必要なものをテストすることに自分自身を限定しています。あなたが与えた例では、私はこれらの2つの簡単な割り当てをテストすることはありません。

__init__()メソッドを確認するには、ある種の糸くず取りツールを使用して、他のメソッドでアクセスするすべての属性に__init__()の値が割り当てられていることを確認します。おそらく、すべての属性に対して明示的なテストを書くよりも効率的です。

関連する問題