2017-11-02 2 views
1

Wie könnte ich ein iterierbares Element vortäuschen?TypeError: Argument vom Typ "Mock" ist nicht iterierbar

Bei dem Versuch, diese Methode zu testen:

def convert_time_field(klass, field, default=None): 
     time = GrapheneHelper.get_json_field(klass, field, default) 

     if time is None: 
      return None 
     else: 
      return iso8601.parse_date(time) 

Mein erster Test gibt diesen Fehler zurück: TypeError: argument of type 'Mock' is not iterable

def test_convert_time_field(self): 
     """ Return YYYY-MM-DDTHH:MM:FF in iso8601 format """ 
     time = '2017-09-18T23:09:57Z' 
     expected_time = '2017-09-18 23:09:57+00:00' 
     mock_klass = Mock() 
     self.assertEqual(GrapheneHelper.convert_time_field(mock_klass, time, default=None), expected_time) 

Was ich über Mocks in diesem Fall bin Missverständnis?

+0

Ich glaube, Sie wollen eine 'MagicMock'. Pro docs: https://docs.python.org/3/library/unittest.mock-examples.html#mocking-a-generator-method – RobertB

+0

Ich benutze Python 2.7 ... Ich denke, es wird unterstützt - wird geben es ist ein Versuch –

Antwort

0

Mein Test endete zu diesem Wechsel:

@patch('myModule.myClass') 
def test_convert_time_field(self, mock_klass): 
    """ Return YYYY-MM-DDTHH:MM:FF in iso8601 format """ 
    mock_klass.json = {'time_field': '2017-09-18T23:09:33'} 
    expected_time = iso8601.parse_date('2017-09-18 23:09:33') 

    self.assertEqual(GrapheneHelper.convert_time_field(mock_klass, field='time_field', default=None), expected_time) 
Verwandte Themen