A documentação do Django ( http://docs.djangoproject.com/en/1.3/topics/testing/#running-tests ) diz que você pode executar casos de teste individuais especificando-os:
$ ./manage.py test animals.AnimalTestCase
Isso pressupõe que você tenha seus testes em um arquivo tests.py no seu aplicativo Django. Se isso for verdade, esse comando funcionará como esperado.
Eu tenho meus testes para uma aplicação Django em um diretório de testes:
my_project/apps/my_app/
├── __init__.py
├── tests
│ ├── __init__.py
│ ├── field_tests.py
│ ├── storage_tests.py
├── urls.py
├── utils.py
└── views.py
O tests/__init__.py
arquivo tem uma função suite ():
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)
Para executar os testes que eu faço:
$ ./manage.py test my_app
Tentar especificar um caso de teste individual gera uma exceção:
$ ./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
Eu tentei fazer o que a mensagem de exceção dizia:
$ ./manage.py test my_app.StorageTestCase
...
ValueError: Test label 'my_app.StorageTestCase' does not refer to a test
Como especifico um caso de teste individual quando meus testes estão em vários arquivos?
fonte
another.test:TestCase
Desde o Django 1.6, você pode executar um caso de teste completo ou único teste, usando a notação de ponto completa para o elemento que deseja executar.
A descoberta automática de teste agora encontrará testes em qualquer arquivo que comece com teste no diretório de trabalho, portanto, resolva a questão de renomear seus arquivos, mas agora você pode mantê-los dentro do diretório que deseja. Se você quiser usar nomes de arquivos personalizados, poderá especificar um padrão (padrão Django test runner) com o sinalizador de opção
--pattern="my_pattern_*.py"
.Portanto, se você estiver no seu
manage.py
diretório e quiser executar o testetest_a
dentro daTestCase
subclasseA
dentro de um arquivotests.py
no aplicativo / móduloexample
, faça:Se você não deseja incluir uma dependência e está no Django 1.6 ou posterior, é assim que você faz.
Veja a documentação do Django para mais informações
fonte
error: option --pattern not recognized
einvalid command name
Eu estava tendo esse problema e encontrei essa pergunta, caso mais alguém aparecesse, aqui estava o que eu descobri. O DjangoTestSuiteRuner usa um método chamado build_test (label) que descobre quais casos de teste executar com base no rótulo. Analisando esse método, eles estão fazendo um getattr () no módulo "models" ou "test". Isso significa que, se você devolver um conjunto em que o executor de testes não está procurando seus casos de teste nesse conjunto, ele será exibido apenas em um desses módulos.
Uma solução rápida é usar
__init__.py
para importar seus testes diretamente, em vez de definir um conjunto. Isso os faz parte do módulo "test" e, portanto, o build_test (label) pode encontrá-los.Para o seu exemplo acima,
tests/__init__.py
basta conter:Isso não é muito elegante e, claro, se você está tentando fazer algo mais complicado com sua suíte, isso não funcionará, mas funcionaria nesse caso.
fonte
Isso deve funcionar
fonte
Também encontrei esse problema e, em vez de usar o django-nose, segui este link aqui: http://www.pioverpi.net/2010/03/10/organizing-django-tests-into-folders/ . Você precisa abrir seu init .py e importar seus testes.
Ex no init .py:
from unique_test_file import *
fonte
Coloque esse código no seu __init__.py e ele importará todas as classes de teste no pacote e nos subpacotes. Isso permitirá que você execute testes específicos sem importar manualmente todos os arquivos.
Da mesma forma, para o seu conjunto de testes, você pode simplesmente usar:
Agora, tudo o que você precisa fazer para novos testes é gravá-los e garantir que eles estejam na pasta de testes. Não há mais manutenção tediosa das importações!
fonte