Python-Verspottung, warum muss der Verspotter nicht initialisiert werden? So injizieren Sie Fixtures in Unit-TestsPython

Python-Programme
Guest
 Python-Verspottung, warum muss der Verspotter nicht initialisiert werden? So injizieren Sie Fixtures in Unit-Tests

Post by Guest »

Ich schreibe einen Unit-Test, bei dem ich das API-Verhalten simulieren muss. Die Frage besteht aus zwei Teilen. Im Moment verwende ich Fixture, was gut funktioniert, aber ich verstehe nicht wirklich, wie der Mock hier funktioniert. Ich verstehe nicht wirklich, wie die Mocker-Objekte zur Laufzeit an die Funktion „mock_dataiku“ übergeben werden (ich schätze, das ist etwas Magie im Mock-Paket?

Code: Select all

  @pytest.fixture()
def mock_dataiku(mocker):
# Mock Dataiku client and project
mock_client = MagicMock()
mock_project = MagicMock()
mocker.patch('dataiku.api_client', return_value=mock_client)
mock_client.get_project.return_value = mock_project
return mock_project

def test_cleanse_existing_variable(mock_dataiku):
# Set up project variables
mock_dataiku.get_variables.return_value = {
"local": {"var1": "old_value", "comment": "some_comment"}
}

cleanse(["var1", "comment"])

# Check if variables were set to the default value
expected_variables = {"local": {"var1": "-1", "comment": ""} }
mock_dataiku.set_variables.assert_called_with(expected_variables)
Der zweite Teil der Frage ist, wie man diese Tests unter die Unittest-Testklasse bekommt. Ich habe stattdessen Folgendes versucht, um das Fixture zu instanziieren, aber offensichtlich funktioniert es nicht, da ich keinen Zugriff auf das Spottobjekt habe. Ich bin ziemlich neu im Testen und möchte daher auch fragen: Ist es in diesem Fall sinnvoll, Unittest.Testcase zu verwenden? Warum werden Geräte nicht unterstützt? Kann ich die Klasse einfach weglassen und stattdessen pytest selbst verwenden?
class test_cleanse(unittest.TestCase):

Code: Select all

def __init__(self):

# Mock Dataiku client and project
mock_client = MagicMock()
mock_project = MagicMock()
mocker.patch('dataiku.api_client', return_value=mock_client)
mock_client.get_project.return_value = mock_project
#return mock_project
self.mocker=mock.project

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post