2016-05-04 5 views
2
class TestHBVbs3(object): 
     @patch.object(Hbvbs3, 'GetConfigClass') 
     def test_get_grower_list(self, config_data, mock_requests_get): 
      # Arrange 
      config_data.return_value = ConfigMock() 
      post_response = {'1st_key': '1st_value', '2nd_key': '2nd_Value'} 
      mock_requests_get.return_value = MagicMock(status_code=200, post_response=post_response) 

      # Act 
      sut = Hbvbs3() 
      the_response = sut.get_growers_list() 

      # Assert 
      assert_equals(the_response.response["1st_key"], mock_requests_get.return_value.response["1st_key"]) 
      assert_equals(the_response.response["2nd_key"], mock_requests_get.return_value.response["2nd_key"]) 
      assert_equals(the_response.response, mock_requests_get.return_value.response) 
      assert_equals(the_response.status_code, mock_requests_get.return_value.status_code) 

Actual code in hbvbs3.py: 
class Hbvbs3(object): 
     _logger = log.logging.getLogger("Hbvbs3") 

    def get_growers_list(self): 
      dbconfig = GetConfigClass() 

Mein Problem: Ich konnte nicht herausfinden, wie erfolgreich die Anmerkung verwenden, um dies zu verspotten: @ patch.object (Hbvbs3, ‚GetConfigClass‘) # Dieses Stück Code funktioniert nicht. Ich musste schließlich die GetConfigClass-Instantiierung in eine Hilfsmethode setzen und diesen Aufruf vortäuschen, aber ich hoffte, dass ich Hilfe bekommen konnte, diese spezifische Instantiierung in der Methode selbst zu verspotten: "get_growers_list (self):" ... - Wie verspottet man diese Art der Instanziierung innerhalb einer Instanzmethode meiner Klasse Hbvbs3 unter Verwendung der Scheinannotationen? habe ich versucht, alle möglichen Kombinationen in der Anmerkung, wie:Python Mocking für Testeinheit mit Py.Test

@patch('Hbvbs3.GetConfigClass') 
@patch.object(Hbvbs3, '__main__.GetConfigClass') 
@patchHbvbs3('_get_growers_list.GetConfigClass') 

Nichts davon gearbeitet, so ist es eine Möglichkeit, mit Anmerkungen in Python zu einfach, diese Art von Instanziierung zu Mock? Das scheint nicht so schwer zu sein, aber ich werde verdammt sein, wenn ich die richtige Kombination für die Annotation finde. Bitte lassen Sie mich wissen, wo ich falsch liege? Danke!

Antwort

0

Es ist wie Ihr Code sieht für die Datei hbvbs3.py hat diese Art von Import-Anweisung an der Spitze:

from config import GetConfigClass 

... und die GetConfigClass verwendet wird, wie Sie in Hbvbs3 gezeigt haben. Daher GetConfigClass mit einer Mock Instanz zu ersetzen, können Sie die Dekorateur Form von patch verwenden:

@patch('[...].hbvbsp3.GetConfigClass') 

Sie müssen sicherstellen, dass der verwendete Pfad für den vollständigen Pfad zum hbvbsp3 Modul (ersetzt die [...] - ich in der Regel die Verwendung vollständiger Python-Pfad von der Wurzel des Projekts für Klarheit). Ich habe immer die Dokumente auf Where to patch nützlich gefunden.

+0

Vielen Dank. Ich werde es versuchen und Sie wissen lassen, ob es funktioniert. Ich schätze die Hilfe! –