2011-08-03 15 views
8

Çalıştığım bir projenin temel bölümünü yazmayı yeni bitirdim ve devam etmeden önce test etmeden yazım testi yapmak istiyorum. Bunu daha önce yapmam gerektiğinin farkındayım, ama başladığımda Python'u bilmiyordum, bu yüzden .. ne olursa olsun ..Bir modülü ana dizinden nasıl alırım? (en kısa sürede)

Neyi başarmak istediğim: Ana paketin alt paketini kullanıyorum. içinde test etmek istediğim tüm modülleri içerir. 'Testler' denen bir alt-paket koymak ya da daha sonra tüm test durumlarımı içeren bir paket koymak istiyorum, ki bu paketin dışındaki bir test paketinde toplanabilmeyi isterim. tek seferde tüm proje.

/projectPackage 
/projectPackage/package 
/projectPackage/package/\__init__.py (empty) 
/projectPackage/package/someModule.py 
/projectPackage/package/... (more modules) 
/projectPackage/package/testing.py (runs all the tests in /tests/) 
/projectPackage/package/tests 
/projectPackage/package/tests/\__init__.py (empty) 
/projectPackage/package/tests/someModuleTests.py 

Sorun yaşıyorum:

someModuleTests onun yöntemlerini test böylece üst paketinden someModule ithal etmek zorunda

yapısı böyle bir şeydir. Bu işe yaramıyor. Ben gibi çeşitli hatalar alıyorum: Neyse

Attempted relative import beyond toplevel package 

, ben bir Python çaylak olduğum için bu sadece bekliyoruz! Bu proje için nasıl yapacağım konusunda kendi fikirlerim var, çünkü elbette her biri farklı, ancak orta büyüklükteki python projelerinin yapılandırılmasına dair genel tavsiyeler de takdir ediliyor.

cevap

13

Birim testini ana dizinden çalıştırın, böylece dizin PYTHONPATH'ınızda (geçerli çalışma dizini her zaman). Bu, test dosyasını ana dizinden yürütmek veya paketinizdeki tüm testleri yinelemeli olarak inceleyen nosetest gibi bir şey kullanarak yapılır.

Göreceli ithalat kullanmayın, bunlar gibi şeylere neden olurlar. PYTHONPATH ve/veya sys.path'inizi denemeye ve düzeltmeye çalışmayın.

+0

Tamam harika, teşekkürler. Seni kabul ederim, ama yeterli bir itibarım yok: S –

+0

Sorun değil, cevabımı geçmiş gibi seçebilirsin sanki yeterince istersen :-) – ikanobori

1

Kodunuzu yürütürseniz, PYTHONPATH ürününüz doğru bir şekilde ayarlanmış olmalıdır. Yapmanız gereken şey, almak istediğiniz modülü belirtmektir, örn.

import projectPackage.package.someModule 
1

Eğer testler komut satırı araçlarını kullanmakta olduğunu düşünürsek, the docs takip edip aşağıdaki gibi olabilir:

python -m unittest package.tests.someModuleTests 
İlgili konular