을 조롱 어떻게 CanonPerson
모델장고 모델 쿼리
def compute(self, is_send_emails, test_email_address):
cpses = CanonPerson.objects.filter(persons__vpd=6,
persons__country="United States",
persons__role__icontains=';IX;').prefetch_related("persons").using("global")
for cp in cpses:
...
나는 확실히 내가 계속할 수 있도록, 나에게 interable 모음을 반환 CanonPerson.objects.filter
을 조롱하는 방법을 분실하고 다음 조롱하고 싶습니다.
이것은 내가 지금까지 무엇을했는지 있습니다 : 컴퓨팅 기능에
def test_X_count(self):
with mock.patch('apps.dbank.models.CanonPerson.objects.filter') as canon_patch:
mock_cp = mock.MagicMock(spec=CanonPerson)
mock_person = mock.MagicMock(spec=Person)
mock_person.vpd = 6
mock_cp.country = "United States"
mock_cp.role = ";IX;"
mock_cp.persons.add(mock_person)
canon_patch.objects.filter.return_value = [mock_cp] // ???
oi = OptinInvites()
oi.compute(False, None)
oi.get_most_recent_email.assert_called_once_with(1)
내가 cpses
을 볼 수는 MagicMock 유형입니다. 그러나 iterable이 아니고 그 후에 for loop
이 나오면 그냥 넘어갑니다. 반환 값을 [mock_cp]
으로 설정하면 반복 가능한 목록을 만들 수 있다고 생각 했습니까?
시도가 [mock_django] (https://github.com/dcramer/mock-django)를 사용합니다. 어쩌면 그것은 당신에게 도움이 될 것입니다. –
테스트에서 실제 데이터를 생성하지 않는 이유는 무엇입니까? 그것이 정상적인 방법입니다. 또는 [factory boy]와 같은 것을 사용하십시오 (http://factoryboy.readthedocs.org/en/latest/). –
매우 빠른 단위 테스트를 작성하려는 경우 장고 모델을 조롱하고 싶은 한 가지 이유가 있습니다. 완전 통합 테스트를 작성하려면 모델을 조롱하지 않아도됩니다. 두 가지 접근 방식이 각각 있습니다. – aychedee