2014-06-25 14 views
8

Çok fazla dosya işlemi içeren bir program yazıyorum. Bazı işlemler, subprocess.Popen, örneğin, split -l 50000 ${filename}, gzip -d -f ${filename} ${filename}. numaralarını arayarak yapılır.Birim, Popen kullanan bir işlevi nasıl test eder?

Şimdi programın işlevselliğini birime test etmek istiyorum. Ama bu işlevleri nasıl test edebilirim?

Herhangi bir öneriniz var mı?

+0

['mock'] (http://www.voidspace.org.uk/python/mock/) kitaplığını kullanın, bkz. [Bu örnek] (http://stackoverflow.com/questions/19179795/how- to-mock-alt süreç-call-in-a-unittest). – alecxe

+0

@shihpeng OS aracının bağımlılığından kurtulmak istiyor musunuz (örneğin Windows üzerinde verilen testi çalıştırmak için) veya çağrıyı bir şeye nasıl sarmanın etkili bir yolunu bulmak istiyorsanız, OS'de ne kullanacaksınız, ama değerlendirmenize izin verir. eğer her şey yolunda gitti mi? –

cevap

8

Kanonik yol, aramayı Popen ile dağıtmak ve sonuçları bazı test verileriyle değiştirmek. mock library documentation'a bir göz atın. ... bu dahil olduğunu

Not

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

Şimdi test etmek istediğini bazı kontroller veya yapabilirsiniz:

Böyle bir şey yapacağını python3.3'te standart kitaplıkta unittest.mock.

+1

Bu bir linke sadece cevabı yakındır ... –

İlgili konular