Estou tentando criar um UnitTest para verificar se um objeto foi excluído.
from django.utils import unittest
def test_z_Kallie_can_delete_discussion_response(self):
...snip...
self._driver.get("http://localhost:8000/questions/3/want-a-discussion")
self.assertRaises(Answer.DoesNotExist, Answer.objects.get(body__exact = '<p>User can reply to discussion.</p>'))
Eu continuo recebendo o erro:
DoesNotExist: Answer matching query does not exist.
django
unit-testing
exception
BryanWheelock
fonte
fonte
Respostas:
Você não precisa importá-lo - como você já escreveu corretamente,
DoesNotExist
é uma propriedade do próprio modelo, neste casoAnswer
.Seu problema é que você está chamando o
get
método - o que gera a exceção - antes de ser passado paraassertRaises
. Você precisa separar os argumentos dos chamados, conforme descrito na documentação mais unittest :ou melhor:
fonte
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact = '<p>User can reply to discussion.</p>')
- ou seja, comget
os argumentos de s adicionados como argumentos individuais de kw, não dentro de a()
.with
solução funcionou para mim.Você também pode importar
ObjectDoesNotExist
dedjango.core.exceptions
, se desejar uma maneira genérica e independente de modelo para capturar a exceção:fonte
DoesNotExist
é sempre uma propriedade do modelo que não existe. Nesse caso, seriaAnswer.DoesNotExist
.fonte
Uma coisa a ser observada é que o segundo parâmetro
assertRaises
deve ser exigível - não apenas uma propriedade. Por exemplo, tive dificuldades com esta afirmação:mas isso funcionou bem:
fonte
fonte
É assim que eu faço esse teste.
fonte