2013-12-11 11 views
8

Zapytałem this pytanie o to, jak napisać monit, aby sprawdzić wyjście w stdout i otrzymałem rozwiązanie. Teraz muszę napisać test case, aby sprawdzić, czy zawartość są zapisywane w pliku i że zawartość są zapisywane zgodnie z oczekiwaniami npnapisanie funkcji pytest, aby sprawdzić wyjście do pliku w python?

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

teraz funkcją pytest aby sprawdzić, czy to napisane:

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

podczas gdy to wydaje się działać, nie sądzę, że jest to idealne, zwłaszcza trudne kodowanie. w jaki sposób zapisuje się ten typ pliku w typowym pliku test functions?

+0

Dlaczego nie byłby idealny? Napisałeś, że chcesz sprawdzić, czy zawartość jest zapisana zgodnie z oczekiwaniami, więc przeglądanie pliku i sprawdzanie wydaje się najlepszą opcją. Zawsze możesz utworzyć zmienną z serią losowych znaków i sprawdzić, czy została napisana pomyślnie; możesz sprawdzić "expected in file.read()", aby sprawdzić, czy dane zostały dołączone (ale użyłeś flagi 'w', więc jest to zły test); itp. Co chcesz przetestować, jeśli nie to? Być może to, co chcesz, to prawdziwe pytanie, tak jak w większości testów. –

Odpowiedz

12

Istnieje tmpdir fixture, który utworzy tymczasowy katalog testowy. Więc test będzie wyglądać mniej więcej tak:

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' 

Tutaj jesteś refaktoryzacji kodu nie może być ustalony albo, co jest najlepszym przykładem tego, jak testowanie kodu sprawia, że ​​można zaprojektować go lepiej.

+0

co robi tmpdir? więc tworzy plik praktycznie w pamięci? –

+1

Tworzy prawdziwy katalog, który możesz później sprawdzić, w systemie UNIX zazwyczaj znajdziesz je w '/ tmp/pytest-xxxx' z dowiązaniami symbolicznymi do ostatniego uruchomienia. Zawsze możesz dowiedzieć się o urządzeniach, wywołując 'py.test --fixtures' i dla sprawy tmpdir. Więcej informacji znajdziesz na http://pytest.org/latest/tmpdir.html. – flub

Powiązane problemy