2016-10-05 5 views
0

私はこれは私がそれを行う方法であるクラスA からA.method1をテストする必要があるいくつかのPythonのクラスにmockでpython unboundメソッドをテストする方法は?

Class A(object): 

    def __init__(self, dep1, dep2, *args, **kwargs): 
     self.prop1 = dep1 
     self.prop2 = dep2 

    def method1(self): 
     self.prop3 = self.prop1.make_action() 
     return 

を持っている:

import pytest 
import mock 

def test__method1(): 
    """Ensure prop3 has been set from a.prop1.make_action() returned value""" 
    a = mock.MagicMock(spec=A) 
    a.prop1 = mock.Mock() 
    a.prop2 = mock.Mock() 
    a.prop1.make_action.return_value = "val1" 
    A.method1(a) 
    assert a.prop1.make_action.call_count == 1 
    assert a.prop3 == "val1" 

が、それはこのようなテストを行うための最善の方法です1つ、または私は何か間違っている? を追加しました: は、まず私はこのような法1を呼び出そうとしました:

a.method1 = A.method1 
a.method1() 

しかし、それは仕事をdidn`tの。
そして今私はまた、a.prop1a.prop2をモックする必要があります。しかし、場合によってはの仕様をに設定しないと、prop1とprop2をモックする必要はありません。すでに存在しています。これらは、私は今、私はこのようにするこの質問

+0

私には正常に見えます。どのような問題がありましたか? 'prop2'は' A.method1'がそれに触れないので、全く設定されないままにすることができます。 –

答えて

0

を求めてきました理由は:

@pytest.fixture 
def instance_of_a(): 
    a = mock.Mock(A) 
    a.prop1 = mock.Mock() 
    a.prop2 = mock.Mock() 
    a.prop1.make_action.return_value = "val1" 
    return a 

def test__a_method1(instance_of_a): 
    A.method1(instance_of_a) 
    assert instance_of_a.prop1.call_count == 1 
    assert instance_of_a.prop3 == "val1" 
関連する問題