2011-04-07 2 views
0

Mox를 사용하여 django 필터 쿼리를 조롱하려고합니다. 내 장고 쿼리가 체인 메서드이기 때문에 Mox 웹 사이트에서 지침을 따르고 있지만 AndReturn() 메서드가 존재하지 않는다고 불평합니다. 내 단위 테스트에서 Mox를 사용하여 Mocking Django 쿼리

def CheckNameUniqueness(device): 
    ex_device = device.__class__.objects.filter(name__iexact=device.name) 
    if not ex_device: 
     return None 
    if ex_device.count() > 0: 
     return ex_device 

, 나는 빈리스트를 반환하는 필터 방법을 조롱하기 위해 노력하고있어 :

여기 내 방법입니다. AttributeError : 내 테스트 케이스를 실행하면

class testCheckNameUniqeness(unittest.TestCase): 
    """ Unit test for CheckNameUniqueness function """ 

    def setUp(self): 
     self.device_mocker = mox.Mox() 

    def testCheckNameUniqenessNotExists(self): 

     device = self.device_mocker.CreateMock(models.Device) 
     device.name = "some name" 
     device.objects.filter(name__iexact=device.name).AndReturn(None) 

     # Put all mocks created by mox into replay mode 
     self.device_mocker.ReplayAll() 

     # Run the test 
     ret = CheckNameUniqueness(device) 
     self.device_mocker.VerifyAll() 
     self.assertEqual(None, ret) 

, 나는 다음과 같은 오류가 '검색어 세트'개체가 어떤 속성 'AndReturn'

참고 때문에 데이터베이스 테이블의 많은 수의, 오라클이 없습니다 데이터베이스 및 기타 복잡한 문제가 발생할 경우 데이터베이스를 만들지 않고이 단위 테스트를 실행해야합니다.

답변

0

그것은

device.CheckNameUniqueness().AndReturn(None) 

하지 않을까요? 그래서 Mox 문서를 읽었습니다. 나는 실제로 그것을 실제로 사용하지 않고있다.

0

동일한 문제가 발생했습니다.

def testCheckNameUniqenessNotExists(self): 
    self.device_mocker.StubOutWithMock(models.Device, "objects") 

    models.Device.objects.filter(name__iexact=device.name).AndReturn(None) 

    # Put all mocks created by mox into replay mode 
    self.device_mocker.ReplayAll() 

    # Run the test 
    ret = CheckNameUniqueness(device) 
    self.device_mocker.VerifyAll() 
    self.assertEqual(None, ret) 

당신이 체인 검색어 세트를 원한다면, 당신이 검색어 세트의 모의을하고 반환 할 수 있습니다 :

from django.db.models.query import QuerySet 

def testCheckNameUniqenessNotExists(self): 
    qs = self.device_mocker.CreateMock(QuerySet) 
    self.device_mocker.StubOutWithMock(models.Device, "objects") 

    models.Device.objects.filter(name__iexact=device.name).AndReturn(qs) 
    qs.count().AndReturn(1) 

    # Put all mocks created by mox into replay mode 
    self.device_mocker.ReplayAll() 

    # Run the test 
    ret = CheckNameUniqueness(device) 
    # etc...