2013-12-11 10 views
8

Ho chiesto alla domanda this su come scrivere un pytest per verificare l'output in stdout e ottenere una soluzione. Ora ho bisogno di scrivere un test case, per verificare se i contenuti sono scritte nel file e che i contenuti sono scritti come previsto esempio:scrivendo una funzione pytest per controllare l'output in un file in python?

def writetoafile(): 
    file = open("output.txt",w) 
    file.write("hello\n") 
    file.write("world\n") 
    file.close() 

ora una funzione pytest per verificare se scritto:

def test_writeToFile(): 
    file = open("ouput.txt",'r') 
    expected = "hello\nworld\n" 
    assert expected==file.read() 

mentre questo sembra funzionare, non penso che questo sia l'ideale, specialmente con hard-coding. in che modo questo tipo di test functions di scrittura su un file viene solitamente scritto?

+0

Perché questo non è l'ideale? Hai scritto che vuoi controllare che i contenuti siano scritti come previsto, quindi esaminare il file e il controllo sembra l'opzione migliore. Puoi sempre creare una variabile con una serie di caratteri casuali e controllare se è stata scritta con successo; puoi controllare "previsto in file.read()" per vedere se i dati sono stati aggiunti (ma hai usato il flag "w", quindi qui è un test negativo); ecc. Cosa vuoi testare se non questo? Forse sapere quello che vuoi è la vera domanda qui, come nella maggior parte dei test. –

risposta

12

C'è lo tmpdir fixture che creerà una directory temporanea per prova. Quindi un test sarebbe simile a questa:

def writetoafile(fname): 
    with open(fname, 'w') as fp: 
     fp.write('Hello\n') 

def test_writetofile(tmpdir): 
    file = tmpdir.join('output.txt') 
    writetoafile(file.strpath) # or use str(file) 
    assert file.read() == 'Hello\n' 

Qui si sta refactoring del codice non da hard-coded o, che è un esempio lampante di come testare il codice fa a progettare meglio.

+0

cosa fa tmpdir? quindi crea un file virtualmente in memoria? –

+1

Crea una directory reale che puoi esaminare successivamente, su UNIX di solito li trovi in ​​'/ tmp/pytest-xxxx' con collegamenti simbolici all'ultima esecuzione. Puoi sempre conoscere le fixture invocando 'py.test --fixtures' e per il caso tmpdir fai riferimento a http://pytest.org/latest/tmpdir.html per maggiori dettagli. – flub

Problemi correlati