2011-05-03 18 views
99

Django belgeleri (http://docs.djangoproject.com/en/1.3/topics/testing/#running-tests) bunları belirterek bireysel test durumları çalıştırmak söylüyor Django uygulamanızda bir tests.py dosyası. Bu doğruysa, bu komut beklendiği gibi çalışır.Django belirli test vakası Running

import unittest 

from my_project.apps.my_app.tests import field_tests, storage_tests 

def suite(): 
    tests_loader = unittest.TestLoader().loadTestsFromModule 
    test_suites = [] 
    test_suites.append(tests_loader(field_tests)) 
    test_suites.append(tests_loader(storage_tests)) 
    return unittest.TestSuite(test_suites) 

yapmam testlerini çalıştırmak için::

tests/__init__.py dosya paketi() işlevi vardır

my_project/apps/my_app/ 
├── __init__.py 
├── tests 
│ ├── __init__.py 
│ ├── field_tests.py 
│ ├── storage_tests.py 
├── urls.py 
├── utils.py 
└── views.py 

:

Bir testler dizinde bir Django uygulaması için benim testleri

$ ./manage.py test my_app 

Tek bir sınama durumu belirtmeye çalışıldığında bir istisna kaldırılır:Benim testleri birden fazla dosya olduğunda

$ ./manage.py test my_app.StorageTestCase 
... 
ValueError: Test label 'my_app.StorageTestCase' does not refer to a test 

nasıl bir birey test durumda belirtebilirim:

$ ./manage.py test my_app.tests.storage_tests.StorageTestCase 
... 
ValueError: Test label 'my_app.tests.storage_tests.StorageTestCase' should be of the form app.TestCase or app.TestCase.test_method 
Ben istisna mesajı söylediklerini yapmaya çalıştık?

cevap

97

Kasa django-nose. vaka başkasının gelir de, bu soruyu

python manage.py test another.test.TestCase.test_method 
+0

Teşekkür @sdolan yüksek güçte olmalıdır. Aynı problemi hekevintran ile karşılaştı. Django-burnuna geçti ve bu sorunu düzeltdi, ayrıca varsayılan Django test koşucusundan daha iyi çalışıyor. – LeeMobile

+5

Teşekkürler. Django'nun test yolcusunun bunu yapamayacağı bir parça. – hekevintran

+0

Bu bir test çalıştırıyor, ancak tüm bir TestCase'in nasıl çalıştırılacağı? – jMyles

7

bu sorunu kendim başlamıştı ve bulundu:,

python manage.py test another.test:TestCase.test_method 

veya yorumlarda belirtildiği gibi sözdizimini kullanın: Bu gibi bazı testler belirlemenizi sağlar Bu arada, ben kazdım. DjangoTestSuiteRuner, etikete dayalı olarak hangi test durumlarının çalıştırılacağını belirten build_test (label) adında bir yöntem kullanır. Bu yönteme bakıldığında, "modeller" veya "test" modülünde bir getattr() yaptıkları ortaya çıkıyor. Bu, bir paketi döndürdüğünüzde, test koşucu, test paketlerini bu pakette aramıyorsa, yalnızca bu modüllerden birine bakar.

Hızlı bir çalışma, bir paketi tanımlamak yerine testlerinizi doğrudan almak için __init__.py numaralı telefonu kullanmaktır. Onları "test" modülünün bir parçası yapar ve böylece build_test (etiket) onları bulabilir. Yukarıdaki Örneğin

, tests/__init__.py basitçe içermelidir:

from field_tests import * 
from storage_tests import * 

Bu çok şık ve tabii ki o zaman bu işe yaramaz süitinizde ile daha karmaşık bir şey yapmak çalışıyorsanız değil, ama bu durum için olurdu.

2

:

Ör yılında .py init.py ve tüm test sınıflarını paket ve alt paketler içerisine alır. Bu, her dosyayı elle almadan belirli testleri çalıştırmanıza izin verecektir.

import pkgutil 
import unittest 

for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): 
    module = loader.find_module(module_name).load_module(module_name) 
    for name in dir(module): 
     obj = getattr(module, name) 
     if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase): 
      exec ('%s = obj' % obj.__name__) 

Benzer şekilde, test paketi için basitçe kullanabilirsiniz:

def suite(): 
    return unittest.TestLoader().discover("appname.tests", pattern="*.py") 

Artık yeni testler için yapmanız gereken tek şey onları yazmak ve onlar testler klasöründe olduğundan emin olmaktır. İthalatların daha sıkıcı bir bakımı yok!

116

Django 1.6'dan beri, çalıştırmak istediğiniz öğenin tam nokta işaretini kullanarak tam bir test durumu veya tek bir test çalıştırabilirsiniz.

Otomatik Test keşif şimdi çok dosyalarınızı yeniden adlandırmak gerekir sorusunu ele çalışma dizini altında testi ile başlayan herhangi bir dosyada testleri bulacaksınız, ama artık istediğiniz dizin içinde tutabilirsiniz. Özel dosya adlarını kullanmak istiyorsanız, seçenek bayrağı --pattern="my_pattern_*.py" ile bir desen (varsayılan Django test koşucusu) belirtebilirsiniz. Eğer manage.py dizininde yer alıyor ve uygulamanın altındaki bir dosyaya tests.py içine TestCase alt sınıf A iç testi test_a çalıştırmak istiyorsanız

Yani/modül example yapardın:

python manage.py test example.tests.A.test_a 

sen istemiyorsan Bir bağımlılık eklemek ve Django 1.6 ya da daha sonra bunu yapmak nasıl.

See the Django documentation for more information

+0

Nice'e geçmeniz önerilir. – hekevintran

4

Bu

python manage.py test my_app.tests.storage_tests 
İlgili konular