2013-04-06 3 views
3

, I는 내 캐시를 지정 requests.get ('aurl')을 모방 할 수있어서 외부 요청이 없는지 확인합니다.파이썬 장고 모의 캐시 내 settings.py에서

그러나 테스트 코드는 여전히 캐시에 도달하고 그로부터/sets를 가져옵니다. 따라서 내 제품이 이미 캐시를 설정 한 경우 동일한 캐시에서 데이터를 가져 오기 때문에 테스트가 실패합니다. 또는 먼저 테스트를 실행하면 테스트 케이스가 테스트 데이터로 캐시를 설정하고 있는데 이는 생산성 웹 사이트를 실행할 때 반영됩니다.

어떻게 (? None을 반환) 이렇게 설정 호출이 실제 캐시를 설정하지 않는

get_cache('default').set('key', result) 

get_cache('default').get('key') 

에 대한 호출을 조롱하고 실제 아무것도 반환하지 않습니다 얻을 수 있습니다 은닉처.

이 작업을 수행하는 방법에 대한 코드 샘플을 제공해주십시오. 여기

내가 작동하도록이 후 넣을 수 있습니다 어떤 코드 내 requests.get

def test_get_aview(self): 
    with mock.patch('requests.get') as mymock: 
     mymock.side_effect = (lambda url: MOCKED_DATA[url]) 

을 조롱 한 방법이다? 나는

class MockCacheValue(mock.MagicMock): 
    def get(self, key): 
     print 'here' 
     return None 
    def set(self, key, value): 
     print 'here 2' 
     pass 

def test_get_aview(self): 
     with mock.patch('requests.get') as mymock: 
      mymock.side_effect = (lambda url: MOCKED_DATA[url]) 
      mock.patch('django.core.cache.get_cache', new=MockCacheValue) 

뭔가를 시도했지만 작동하고 나에게 그 난 당신이 dummy cache 동안 사용한다고 생각

+0

프로덕션 컴퓨터에서 테스트를 실행하는 이유는 무엇입니까? –

+0

@kashif를 실행하는 동안 [dummy cache] (https://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs/#dummy-caching-for-development)를 사용하는 것이 어떻습니까? 테스트? – alecxe

+0

@Alexander, 내 실제 코드에서 위에 사용하는 캐시는 https://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs/#filesystem-caching 파일 시스템입니다. 테스트 케이스를 실행하는 동안 '기본'캐시에 'BACKEND'에 대한 다른 값을 지정하고 어떻게하면 뷰포트의 실제 코드가 파일 시스템에 액세스하는지 확인할 수 있습니까? – kk1957

답변

9

제대로 조롱하지 않는 것이 아이디어를 제공하는 내부/아무것도 인쇄되지 않습니다 위의 설정 얻을 인쇄 문을 넣어하지 않습니다 에 의해 테스트를 실행 : 테스트 케이스에

  • 최우선 설정, docs
  • 이 세트에서 마우스 오른쪽 버튼을 테스트하는 동안 사용하는 것을 캐시 백엔드 확인을 참조하십시오 tings.py : 테스트를위한 별도의 settings.py

  • 조롱을 갖는

    CACHES = ... 
    if 'test' in sys.argv: 
        CACHES['default'] = {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',} 
    
  • 도움이

희망을 수행하는 방법에 대한 좋은 article를 참조하십시오.

+0

캐시 무시! – kk1957