2014-06-25 26 views
8

Piszę program, który zawiera dużo operacji na plikach. Niektóre operacje są wykonywane przez wywołanie subprocess.Popen, np. split -l 50000 ${filename}, gzip -d -f ${filename} ${filename}..Jak testować jednostkę funkcji, która używa Popen?

Teraz chcę przetestować funkcjonalność programu. Ale w jaki sposób mogę przetestować te funkcje?

Wszelkie sugestie?

+0

Użyj biblioteki ['mock'] (http://www.voidspace.org.uk/python/mock/), zobacz [ten przykład] (http://stackoverflow.com/questions/19179795/how- do -mock-subprocess-call-in-a-unittest). – alecxe

+0

@shihpeng Czy chcesz pozbyć się zależności narzędzia OS (aby uruchomić dany test np. W systemie Windows) lub chcesz znaleźć skuteczny sposób na zawinięcie wywołania do czegoś, co będzie używać polecenia w systemie operacyjnym, ale pozwoli ci ocenić , jeśli wszystko poszło dobrze? –

Odpowiedz

8

Kanoniczny sposób polega na wyszydzeniu połączenia z Popenem i zastąpieniu wyników niektórymi danymi testowymi. Spójrz na mock library documentation.

Można by zrobić coś takiego:

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

Teraz można zrobić kilka sprawdzenie czy cokolwiek chcesz przetestować ...

Zauważ, że to było wliczone w standardowej bibliotece jako unittest.mock w python3.3.

+1

To jest blisko odpowiedzi tylko od linku ... –

Powiązane problemy