2013-08-27 6 views
6

Ich bin daran interessiert, etwas Code zu testen, der das "zufällige" Modul verwendet, und ich würde gerne in der Lage sein, meine eigene falsche Version von random zu patchen/einzufügen, wenn meine Tests laufen, die einen bekannten Wert zurückgibt es zurück zum normalen zufälligen Modul danach. Aus der Dokumentation kann ich nur sehen, dass ich Klassen kitten kann. Gibt es eine Möglichkeit, Funktionen zu patchen? So etwas wie das:Kann ich 'zufällig' mit unittest.mock.patch patchen?

def my_code_that_uses_random(): 
    return random.choice([0, 1, 2, 3]) 

with patch.function(random.choice, return_value=3) as mock_random: 
    choice = my_code_that_uses_random() 
    assert choice == 3 

Dieser Code funktioniert nicht, was brauche ich stattdessen?

Antwort

5

patch.function scheint nicht zu existieren. Sie können patch selbst statt:

with patch('random.choice', return_value=3) as mock_random: 
    choice = my_code_that_uses_random() 
    assert choice == 3 
+2

Wenn Sie es mit einer realen Funktion ersetzen müssen Sie ersetzen können 'return_value' mit:' side_effect = Lambda f: f [0] '. Auf diese Weise können Sie die Übergabe von Sequenzen testen und Elemente herausholen. In diesem Fall wird das erste Element immer "ausgewählt". – phoenix

Verwandte Themen