2014-06-25 1 views
8

Sto scrivendo un programma che contiene molte operazioni sui file. Alcune operazioni vengono effettuate chiamando lo subprocess.Popen, ad esempio split -l 50000 ${filename}, gzip -d -f ${filename} ${filename}..Come testare una funzione che usa Popen?

Ora voglio testare la funzionalità del programma. Ma come posso testare queste funzioni?

Qualche suggerimento?

+0

Utilizzare la libreria ['mock'] (http://www.voidspace.org.uk/python/mock/), vedere [questo esempio] (http://stackoverflow.com/questions/19179795/how- to-mock-sottoprocesso-call-in-a-unittest). – alecxe

+0

@shihpeng Desiderate eliminare la dipendenza dello strumento del sistema operativo (per eseguire determinati test, ad es. Su Windows) o volete trovare un modo efficace per avvolgere la chiamata su qualcosa, che cosa userà il comando nel sistema operativo, ma vi permetterà di valutare , se tutto è andato bene? –

risposta

8

Il modo canonico è di prendere in giro la chiamata a Popen e sostituire i risultati con alcuni dati di test. Dai uno sguardo allo mock library documentation.

Faresti qualcosa di simile:

with mock.patch.object(subprocess, 'Popen') as mocked_popen: 
    mocked_popen.return_value.communicate.return_value = some_fake_result 
    function_which_uses_popen_communicate() 

ora si può fare qualche controllo o qualsiasi altra cosa che si desidera testare ...

Si noti che questo è stato incluso nella libreria standard come unittest.mock in python3.3.

+1

Questo è vicino a un link solo risposta ... –