2013-08-27 12 views
6

Sono interessato a testare del codice che utilizza il modulo "random" e vorrei poter applicare/correggere la mia versione falsa di random quando i miei test sono in esecuzione, che restituisce un valore noto e in seguito torna al normale modulo casuale. Dalla documentazione posso solo vedere che posso applicare le patch alle classi. C'è un modo per applicare le patch? Qualcosa del genere:Posso applicare patch 'random' usando unittest.mock.patch?

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 

Quel codice non funziona, cosa mi serve invece?

risposta

5

patch.function non sembra esistere. È possibile utilizzare patch stesso, invece:

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

Se è necessario sostituirlo con una funzione reale è possibile sostituire 'return_value' con:' side_effect = lambda seguenti: ss [0] '. Questo ti consentirà di testare il passaggio di sequenze e ottenere elementi. In questo caso, sceglierà sempre il primo elemento. – phoenix

Problemi correlati