2010-11-16 13 views
21

(Python 2.6 ve nose kullanıyorum.)Python: Test paketimde geçici dosyaları nasıl yapabilirim?

Python uygulamam için testler yapıyorum. Yeni bir dosyayı açmak, kapatmak ve sonra silmeniz için bir test istiyorum. Doğal olarak, bunun geçici bir dizin içinde olmasını tercih ediyorum çünkü kullanıcının dosya sistemini bozmak istemiyorum. Ve çapraz-işletim sistemi olması gerekiyor.

Nasıl yaparım?

cevap

12

Standart kitaplıktaki tempfile modülüne bakın - ihtiyacınız olan her şey olmalıdır. yazabilir py.test

25

FWIW kullanarak:

def test_function(tmpdir): 
    # tmpdir is a unique-per-test-function invocation temporary directory 

/tmp/pytest-NUM" bir alt dizini olarak oluşturulan bir temiz boş bir dizin alacak "TMPDIR" işlevi argümanı kullanarak her test fonksiyonu, "(linux, win32, farklı bir yola sahiptir) her bir test çalışması için NUM artırılmıştır. Son üç dizin teftişi kolaylaştırmak için tutulur ve daha yaşlı olanlar otomatik olarak silinir. Baz temp dizinini py.test --basetemp=mytmpdir ile de ayarlayabilirsiniz.

TMPDIR nesne de böyle kullanabileceği bir py.path.local nesnedir:

sub = tmpdir.mkdir("sub") 
sub.join("testfile.txt").write("content") 

Ama sadece "dize" yoluna dönüştürmek için de gayet:

tmpdir = str(tmpdir) 
+0

Funkorku, py.test içinde xUnit ayarları/teardown xUnit yöntemleri ile kullanılabilir mi? Yani örn. def setup_method (self, method) 'dan' 'setup_method '' (self, method, tmpdir)' 'dan? – KomodoDave

+0

tmpdir, kurulum yönteminizi '' pytest.fixture (autouse = True) '' ile değiştirirseniz, '' setup_method'', normal pytest armatürleri olarak fikstürleri alabilir. Otomatik kullanım fikstürünün anlamı için fikstür belgelerine bakın. – hpk42

4

tempfile'u doğrudan kullanmak yerine, bunun için bir içerik yöneticisi sarıcısı kullanmayı öneriyorum - içerik yöneticisi, temelde hiçbir kazan plakası olmaksızın tüm durumlarda (başarı/başarısızlık/istisna) dizinin kaldırılmasıyla ilgilenir. Bir yerde ona ihtiyaç duyduğunu noktasına değin - (20 çizgilerin altında uygulanması oldukça kısadır) Bir ev yetiştirilen sürümünü kullanarak olmuştur

from tempdir import TempDir 
... 

# in some test: 
with TempDir() as d: 
    temp_file_name = os.path.join(d.name, 'your_temp_file.name') 
    # create file... 
    # ... 
    # asserts... 

: Burada

kullanılabilmesi nasıl başka bir şey de olsa, yüklemeye hazır bir paket varsa etrafa baktım ve gerçekten de var: tempdir

+0

tempdir standart lib: '' 'ImportError: tempdir' '' isimli bir modül yok – dashesy

+0

paket pip tarafından bulunamıyor! 'pip3 search tempdir' hiçbir şey göstermiyor. – kap

+0

Bunu denerken anladım: AttributeError: __exit__ –

İlgili konular