Limpar um banco de dados no Django antes de cada método de teste

votos
18

Por padrão, quando Django corre contra o backend SQLite ele cria um novo banco de dados na memória para um teste. Isso significa que para cada classe que deriva de unittest.TestCase, eu recebo um novo banco de dados. Isto pode ser alterado para que ele seja limpo antes de cada método de teste é executado?

Exemplo: Eu estou testando uma classe gerente que fornece abstração adicional sobre Django objetos persistentes. O código parece mais-menos assim

class TestForManager(unittest.TestCase):
  def testAddingBlah(self):
    manager = Manager()
    self.assertEquals(manager.getBlahs(), 0)
    manager.addBlah(...)
    self.assertEquals(manager.getBlahs(), 1)

  def testAddingBlahInDifferentWay(self):
    manager = Manager()
    self.assertEquals(manager.getBlahs(), 0)
    manager.addBlahInDifferentWay(...)
    self.assertEquals(manager.getBlahs(), 1)

Agora, a primeira afirmação do segundo teste falhar, porque o estado do banco de dados é preservada entre chamadas de teste e já existe uma instância Blahno banco de dados.

Publicado 12/01/2009 em 08:22
fonte usuário
Em outras línguas...                            


4 respostas

votos
34

Como sempre, a solução é trivial: usar django.test.TestCasenão unittest.TestCase. E funciona em todas as principais versões do Django!

Respondeu 12/01/2009 em 20:59
fonte usuário

votos
0

Para limpar os bancos de dados não-padrão, adicione multi_db = Truena classe

por exemplo

class MyTestCase(django.test.TestCase)
    multi_db = True

    def test_one(self):
        self.assertTrue(True)
Respondeu 07/01/2019 em 07:04
fonte usuário

votos
0

Você pode usar o tearDownmétodo. Ele será chamado após o seu teste é executado. Você pode apagar todos os Blahs lá.

Respondeu 14/12/2010 em 12:11
fonte usuário

votos
0

Por que não fazer o seguinte? Esta realiza o que você precisa sem uma mudança significativa para o seu código.

class TestOneForManager(unittest.TestCase):
  def testAddingBlah(self):
    manager = Manager()
    self.assertEquals(manager.getBlahs(), 0)
    manager.addBlah(...)
    self.assertEquals(manager.getBlahs(), 1)

class TestTwoForManager(unittest.TestCase):
  def testAddingBlahInDifferentWay(self):
    manager = Manager()
    self.assertEquals(manager.getBlahs(), 0)
    manager.addBlahInDifferentWay(...)
    self.assertEquals(manager.getBlahs(), 1)

Editar . O recurso "reset em TestCase" dá-lhe o controle completo.

  • Muitos métodos de teste em um único TestCase são bons quando você tem casos de teste que não interferem uns com os outros.

  • Alguns métodos de teste em um único TestCase são bons quando você tem casos de teste que interferem uns com os outros.

Você pode escolher qual o modelo que se aplica a seus testes agrupando seus métodos de ensaio em um ou muitos TestCases. Você tem controle total e completa.

Respondeu 12/01/2009 em 11:54
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more