Code: Select all
def test_valid_type(monkeypatch):
mapping = {
10: True,
89: True,
120: False,
121: False,
}
monkeypatch.setattr(eligibility, "fetch_valid_types", lambda key: mapping.get(key))
assert eligibility.is_invalid(10) is False
assert eligibility.is_invalid(89) is False
assert eligibility.is_invalid(120) is True
assert eligibility.is_invalid(121) is True
Ich versuche, dieses Monkeypatching in eine set_up-Methode zu verschieben, um das Mocking wiederverwendbar zu machen. Ich habe diese Klasse:
Code: Select all
class TestHelper():
def mock_valid(monkeypatch):
mapping = {
10: {"accessibleDeliveryLocationTypes": ["a"]},
89: {"accessibleDeliveryLocationTypes": ["b"]},
120: {"accessibleDeliveryLocationTypes": []},
121: {"accessibleDeliveryLocationTypes": []},
}
monkeypatch.setattr(routes.eligibility, "nypl_core_patron_types", lambda key: mapping.get(key))
@classmethod
def set_up(cls, monkeypatch):
cls.mock_valid(monkeypatch)
GlobalLogger.initialize_logger(__name__)
Ich weiß, dass dies kein reproduzierbares Beispiel ist. Ich bin weniger daran interessiert, dass dies funktioniert, als vielmehr daran, mehr über Namespaces und die automatischen Definitionen von Pytest herauszufinden.
Kann jemand den Prozess erklären, den Pytest zur Laufzeit durchläuft, um Testfunktionsparameter zu füllen? Es fühlt sich an wie eine Verschmelzung meines Verständnisses von Parametern (die Variablennamen, die den Werten zugewiesen werden, von denen erwartet wird, dass sie an eine Funktion übergeben werden) und Argumenten (die tatsächlich ausgefüllten Werte, die an einen Aufruf dieser Funktion übergeben werden). Gibt es irgendwo eine dokumentierte Liste dieser eingebauten Geräte, die nicht importiert werden müssen, und der vordefinierten Parameter? Schließlich stelle ich mir vor, dass sie irgendwann tatsächlich in die Funktion eingefügt werden müssen. Wo passiert das? Befinden sie sich nur im globalen Maßstab? oder übergibt Pytest sie tatsächlich irgendwann?
Mobile version