O comportamento mudou no Django 1.6, então não há mais a necessidade de criar um pacote. Apenas nomeie seus arquivos test*.py
.
Da documentação do Django 1.7
Quando você executa seus testes, o comportamento padrão do utilitário de teste é encontrar todos os casos de teste (ou seja, subclasses de unittest.TestCase) em qualquer arquivo cujo nome comece com test, crie automaticamente um conjunto de testes a partir desses casos, e execute esse conjunto.
Da documentação do Django 1.6 ,
A descoberta de teste é baseada na descoberta de teste integrada do módulo mais unido. Por padrão, isso descobrirá testes em qualquer arquivo chamado "test * .py" no diretório de trabalho atual.
Comportamento anterior, da documentação do Django 1.5 :
Quando você executa seus testes, o comportamento padrão do utilitário de teste é encontrar todos os casos de teste (ou seja, subclasses de unittest.TestCase) em models.py e tests.py, criar automaticamente um conjunto de testes a partir desses casos de teste, e execute esse conjunto.
Existe uma segunda maneira de definir o conjunto de testes para um módulo: se você definir uma função chamada suite () em models.py ou tests.py, o executor de testes do Django usará essa função para construir o conjunto de testes para esse módulo. Isso segue a organização sugerida para testes de unidade. Consulte a documentação do Python para obter mais detalhes sobre como construir um conjunto de testes complexo.
test*.py
arquivos em uma pasta chamadatests
para manter a pasta limpa - isso é possível, mas você deve executar./manage.py test app.tests
e todas as importações relativas precisam subir de nível (from .models
se tornafrom ..models
).Note que esta abordagem não é mais válida no Django 1.6, veja este post .
Você pode criar uma
tests
pasta com___init___.py
inside (para que se torne um pacote). Depois, adicione seus arquivos .py de teste de divisão e importe todos eles___init___.py
.Ou seja: Substitua o
test.py
arquivo por um módulo que se parece com o arquivo:Crie um
tests
diretório no aplicativo em questãoImporte os submódulos para
app\tests\__init__.py
:Agora você pode usar ./manage.py como se todos estivessem em um único arquivo:
fonte
python manage.py test myapp
, na verdade essa resposta funciona muito bem. (só tentei)A resposta conforme declarada por Tomasz está correta. No entanto, pode ser entediante garantir que as importações
__init__.py
correspondam à sua estrutura de arquivos.Para detectar automaticamente todos os testes na pasta, você pode adicioná-lo em
__init__.py
:Isso permitirá que você execute,
./manage.py test appname
mas não lida com a execução de testes específicos. Para fazer isso, você pode usar este código (também em__init__.py
):Agora você pode executar todos os seus testes via
manage.py test app
ou testes específicos viamanage.py test app.TestApples
fonte
__init__.py
sys.modules[packagename]
. Uma solução rápida é paradel
qualquer um que cause problemas após o exposto acima. (Ou você pode renomear as pastas;))python manage.py test appName
), o segundo bit de código gerava um erro informando que__path__
não estava disponível. Eu o evitei envolvendo o segundo trecho em umaif '__path__' in locals():
verificação, o que fez o truque. Obrigado pela resposta!Apenas faça sua estrutura de diretórios assim:
E
python manage.py test myapp
funcionará como esperado.fonte
http://docs.python.org/library/unittest.html#organizing-tests fala sobre como dividir os arquivos em módulos, e a seção logo acima tem um exemplo.
fonte
Não é necessário codificar nada no init. Basta criar um subdiretório no seu aplicativo. O único requisito é não chamá-lo de testes * Por exemplo
fonte
Com o Django 2.2, uma solução simples e bastante boa pode ser criar uma
test
pasta dentro de um aplicativo, e você pode colocar seustest_...py
arquivos relacionados , basta adicioná__init__.py
- los àtest
pasta.fonte
Se você tiver uma configuração mais complicada ou não quiser usar as
from ... import *
instruções -type, poderá definir uma função chamadasuite
em tests.py (ou tests / __ init__.py), que retornará uma instância deunittest.TestSuite
.fonte
eu acho que
./manage.py test
simplesmente executa todos os truques de teste (no django> = 1.7).Se seus testes de organização são sobre agrupamento e seleção de cerejeira e você é fã de
nose
usar nariz de django :Se você conhece o nariz, sabe como "curinga" muito melhor em todos os seus arquivos.
PS
É apenas uma prática melhor. Espero que ajude. A resposta foi emprestada daqui: Executando um caso de teste específico no Django quando seu aplicativo tem um diretório de testes
fonte
Eu tenho dois arquivos Um é
tests.py
e outro étest_api.py
. Eu posso executá-los individualmente como abaixo.Consulte a resposta do @ osa sobre a convenção de nomenclatura de arquivos.
fonte