Yani, ben sadece py.test
benim autouse, oturum kapsamlı kurulum ve söküm armatürleri gibi çalışmıyor nedenini bulmak için çalışan bir gün kaybetti. Sonunda (this SO comment için şapka ucu!) üzerinden tökezledi plugins documentation yılında bu küçük çerez: alet başlangıçta yüklenen varsayılan olarak, alt dizinleri dosyaları conftest.pyBir alt dizinde conftest.py tanımak için py.test nasıl edinilir?
Not. Projemde
, oldukça standart kurulum gibi görünüyor tests/
alt dizininde, benim py.test dosyaları (conftest.py
ve testler dosyaları) aldık. Testler dizininde py.test
çalıştırırsam her şey doğru şekilde çalışır. Proje kök dizininde py.test
çalıştırırsam, sınamalar hala çalışır, ancak kurulum/yıpranma yordamları hiçbir zaman yürütülmez.
Sorular:
- doğru proje kök dir gelen testler olanak sağlamak için "kanonik" yolu nedir? Kök dizinde
conftest.py
koymak bana garip geliyor, çünkü tüm sınama ile ilgili dosyalarıntests
alt dizininde kalması gerektiğini hissediyorum. - Neden (tasarım bakımından) alt dizinlerinde değil
conftest.py
'ın varsayılan olarak yüklenmez? Alt dizinlerdeki testlerinin varsayılan olarak keşfedildiğini düşünürsek, bu davranışı en azını söylemeye meraklı buluyorum, bu yüzden de en küçük dosyaları bulma konusunda çok az ek çaba var gibi görünüyor. - Son olarak, nasıl alt dizinleri yükte
conftest.py
(yani uzak varsayılan değiştirme) sahip olabilir? Bunu dokümanlar içinde bulamadım. Mümkünse ek konsol argümanlarından kaçınmak isterim, bu yüzden bir yapılandırma dosyasına veya notaya bir şey koyabilir miyim?
Herhangi bir fikir ve ipuçları çok takdir ediliyor, projem için yazım testleri yapabildiğimde bunu teşhis etmek için çok fazla zaman kaybettiğimi/kaybettiğimi hissediyorum. :-(
az örnek:
# content of tests/conftest.py
# adapted from http://pytest.org/latest/example/special.html
import pytest
def tear_down():
print "\nTEARDOWN after all tests"
@pytest.fixture(scope="session", autouse=True)
def set_up(request):
print "\nSETUP before all tests"
request.addfinalizer(tear_down)
Test dosyası:
# content of tests/test_module.py
class TestClassA:
def test_1(self):
print "test A1 called"
def test_2(self):
print "test A2 called"
class TestClassB:
def test_1(self):
print "test B1 called"
Konsol çıkışı: #pylib IRC kanalında bir yardım sonra
pytest_experiment$ py.test -s
======================================================== test session starts =========================================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.2
plugins: cov
collected 3 items
tests/test_module.py test A1 called
.test A2 called
.test B1 called
.
====================================================== 3 passed in 0.02 seconds ======================================================
pytest_experiment$ cd tests/
pytest_experiment/tests$ py.test -s
======================================================== test session starts =========================================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.2
plugins: cov
collected 3 items
test_module.py
SETUP before all tests
test A1 called
.test A2 called
.test B1 called
.
TEARDOWN after all tests
====================================================== 3 passed in 0.02 seconds ======================================================
Benim için iyi çalışıyor. http://ascii.io/a/5263 – falsetru
evet, bu arada bunun zaten sabit bir hata olduğunu öğrendim. – Christoph