Django unidade testando com equipamentos de carregamento para vários problemas dependentes de aplicações

StackOverflow https://stackoverflow.com/questions/2507294

Pergunta

Agora estou fazendo testes unitários para o código já existente. Eu enfrentei o próximo problema:

Depois de executar o SyncDB para criar um banco de dados de teste, o Django preenche automaticamente várias tabelas como Django_Content_Type ou Auth_Permissions.

Em seguida, imagine que eu preciso executar um teste complexo, como verificar o registro dos usuários, que precisará de uma Tabelas e conexões de dados OT OT entre eles.

Se eu tentar usar todo o meu banco de dados existente para fazer acessórios (isso seria bastante condenado para mim) - vou receber o erro como aqui. Isso acontece porque o Django já encheu tabelas como Django_Content_Type.

A próxima maneira possível é usar a opção Django DumpData -Exclude para tabelas SyncDB já preenchidas. Mas isso não funciona bem também, porque se eu levar objetos de usuário e grupo de usuários da tabela de permissões de banco de dados e usuário, que foram criados automaticamente pelo SyncDB, posso receber erros, porque as chaves primárias, conectando -as agora apontando errado. Isso é melhor descrito aqui em parte 'fixing inferno', mas a solução mostrada lá não parece boa)

O próximo esquema possível que vejo é o próximo:

  1. Estou executando meus testes; O Django cria banco de dados de teste, faz o SyncDB e cria todas essas tabelas.
  2. Na minha configuração de teste, estou descartando esse banco de dados, criando o novo banco de dados em branco.
  3. Carregar o despejo de dados do banco de dados existente também na configuração de teste
Foi útil?

Solução

É assim que o problema foi resolvido:

Depois que o SyncDB criou o banco de dados de teste, na parte de configuração dos testes que eu uso os.system Para acessar o shell do meu código. Então, estou apenas carregando o despejo do banco de dados, que quero usar para testes.

Portanto, isso funciona assim: o SyncDB preenche o contentType e algumas outras tabelas com dados. Em seguida, na parte de configuração dos testes que carregam o dump SQL limpa todos os dados criados anteriormente e eu recebo um bom banco de dados.

Pode não ser a melhor solução, mas funciona =)

Outras dicas

Minha abordagem seria primeiro usar o sul para facilitar as migrações do banco de dados (o que não ajuda, mas é bom) e, em seguida, usar um módulo de métodos de criação de modelos.

Quando você corre

  $  manage.py test my_proj

Django com South instalado com o Create the Test DB e execute todas as suas migrações para fornecer um banco de dados de teste completamente atualizado.

Para gravar testes, primeiro crie um módulo Python Calle, test_model_factory.py aqui crie funções que criam seus objetos.

def mk_user():
   User.objects.create(...)

Em seus testes, você pode importar seu módulo test_model_factory e criar objetos para cada teste.

  def test_something(self):
     test_user = test_model_factory.mk_user()

     self.assert(test_user ...)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top