2013-05-09 10 views
6

pyfakefs sembra molto utile: "è stato inizialmente sviluppato come una modesta implementazione falsa dei moduli core Python per supportare interazioni di file system moderatamente complesse ed è stato introdotto su Google. nel settembre 2006. Da allora, ha ricevuto molti (ben collaudati) contributi per estenderne funzionalità e utilità, ed è utilizzato in oltre 900 test di Google Python. "Come sostituire i riferimenti di accesso ai file per un modulo sotto test

Al momento la documentazione è disponibile solo all'interno di docgings dello source code stesso. Spiega che il modulo fornisce i seguenti elementi:

  • FakeFile: fornisce l'aspetto di un file reale.
  • FakeDirectory: fornisce l'aspetto di una directory reale.
  • FakeFilesystem: fornisce l'aspetto di una gerarchia di directory reale.
  • FakeOsModule: utilizza FakeFilesystem per fornire una sostituzione del modulo os falso.
  • FakePathModule: sostituzione modulo os.path faked.
  • FakeFileOpen: Faked file() e open() sostituzioni di funzione.

Tuttavia, la documentazione non spiega come utilizzare efficacemente questi elementi nei test.

Qual è il modo corretto per garantire che un modulo sottoposto a test acceda a un file system falso e non a quello reale?

+0

Penso che quelle API che hai scoperto nelle docstring siano in pratica ciò che devi chiamare durante i test. Quindi lo metti in un metodo di test individuale, o setup, o setupClass (o tearDown *). Cos'altro ti dà fastidio? – CppLearner

+0

Non sono chiaro su come ottenere il modulo in prova per utilizzare il filesystem che creo usando l'API 'fake_filesystem'. Non penso che abbia senso, per esempio, fornire una funzione 'file()' alle classi o alle funzioni del mio modulo solo per permettere di testare. Preferirei che mi aspettassi di farlo con "benevolo patch-scimmia" in un modo simile a [questa risposta] (http://stackoverflow.com/questions/295438/how-can-one-mock-stub-python-module- like-urllib? rq = 1 # answer-295481), ma non sono sicuro di cosa sia la patch di scimmia. – intuited

+0

Le patch per le scimmie non sono così facili se devi farlo dall'inizio. Puoi controllare la libreria di simulazioni da Python e usarla per eseguire patch su determinate operazioni fornendo l'oggetto che desideri venga restituito dalla classe. Posso dare un pensierino un giorno o due da adesso. Nel frattempo vedrò se gli altri possono darti dei pensieri. Un'alternativa è l'iniezione di dipendenza, ma funziona e ha senso se la funzione o il metodo passa esplicitamente in alcune dipendenze, ad esempio un oggetto simile a un file o un oggetto di sessione del database. – CppLearner

risposta

Problemi correlati