2017-05-07 3 views
0

Ich habe so etwas wie dies:eine Klasse als Argument übergeben Mocking

class ThisClass: 
    def my_method(self, param): 
     # Do normal stuff 
     pass 

class OtherClass: 
    def my_method(self, param): 
     # Do crazy stuff 
     pass 

def useful_function(some_class, some_param): 
    internal = some_class() 
    result = internal.my_method(some_param) 
    uses_result(result) 

# The useful_function can be called with any of the classes 
useful_function(ThisClass, 10) 

Was ich will ist zu prüfen, um zu tun, wenn my_method innerhalb useful_function genannt wurde. Ich habe versucht, die Klasse und ihre Methode zu verspotten, aber es hat nicht funktioniert:

# Inside the test class 
def test_case(self): 
    MockSomeClass = mock.Mock() 
    MockSomeClass.my_method.return_value = 'Some useful answer' 
    useful_function(MockSomeClass, 100) 
    MockSomeClass.my_method.assert_called_once() 

Der Fehler beruht auf der Tatsache ich das Ergebnis von my_method in uses_result verwenden, aber die verspottete Methode nicht zurück 'Some useful answer' wie erwartet. Was mache ich falsch?

Antwort

1

Der Mock hat für die Instanziierung some_class() auch zu berücksichtigen:

MockSomeClass.return_value.my_method.return_value = 'Some useful answer' 

internal = some_class() 
internal.my_method() # 'Some useful answer 
+0

Es arbeitete wie ein Charme. Um die Antwort zu vervollständigen, muss die Assertion wie folgt ausgeführt werden: 'MockSomeClass.return_value.my_method.assert_called_once()'. Vielen Dank! – lucastamoios

Verwandte Themen