2013-05-29 2 views
1

저는 Ubuntu 13.04에서 Django 1.4와 Python 2.7을 사용하고 있습니다. 장고 프로젝트에는 코와 커버리지를 사용하는 전체 테스트 스위트가 있습니다. 테스트를 실행하기 전에 데이터베이스에 사용자를 생성해야합니다. 내가 어디에서 할 수 있니?테스트를 실행하기 전에 Django에서 데이터베이스 항목 만들기

system_user = User(username=accounts_constants.SYSTEM_USER) 
system_user.save() 

이 동기 부여는 많은 데이터베이스 트랜잭션을 처리하는 "시스템 로봇"의 존재 때문입니다. 우리 프로젝트에서 전체 추적 제품군을 만들었습니다. 사용자가 민감한 정보를 변경하면 Google은이를 추적합니다. 시스템이 이러한 변경을 수행하면 시스템 사용자가 추적 정보에 나열되기를 원합니다.

코드에서이 변경을 지원하기 위해 수정해야하는 부분이 몇 군데 있습니다. 분명히 테스트 데이터베이스에는이 사용자가 없습니다. 이전에 테스트를 실행하기 전에 추가하고 싶습니다 (데이터베이스가 작성된 후).

나는 파고 있었지만 테스트 목적으로 데이터베이스가 만들어지는 위치를 정확하게 볼 수 없습니다. 처음 시도한 것은 테스트 스위트 러너 입니다.

class CustomTestSuiteRunner(NoseTestSuiteRunner): 
    """ 
    Runs testing suite and adds code coverage report. 
    """ 
    def __init__(self, *args, **kwargs): 
     super(CustomTestSuiteRunner, self).__init__(*args, **kwargs) 
     self.coverage = coverage.coverage() 
     self.coverage.use_cache(0) # don't use caching with coverage.py 
     system_user = User(username=accounts_constants.SYSTEM_USER) 
     system_user.save() 

개발 데이터베이스 (시스템 사용자가이 데이터베이스에 이미 있음)를 사용 중이기 때문에 실패했습니다.

테스트 시퀀스에서 사용자를 추가하려고 시도했지만 적절한 위치가 어디인지 찾을 수없는 것 같습니다.

모든 방향에 크게 감사하겠습니다.

EDIT1 : 나는 CustomTestCase에 슈퍼에 각 setUp을 수정하지 않는

: girasquid의 제안 솔루션에서

. 대신 나는 __init__에서 그것을하려고 노력하고있다.

class CustomTestCase(TestCase): 
    def __init__(self, *args, **kwargs): 
     super(CustomTestCase, self).__init__(*args, **kwargs) 
     try: 
      system_user = User.objects.create(
       username=accounts_constants.SYSTEM_USER) 
      system_user.save() 
     except psycopg2.IntegrityError: 
      pass 

하지만 nose에서 IntegrityError을 얻고있다. 왜 이런 생각일까요?

lib/python2.7/site-packages/nose/loader.py", line 518, in makeTest 
    return self._makeTest(obj, parent) 
IntegrityError: duplicate key value violates unique constraint "auth_user_username_key" 

EDIT2 :

I는 사용자보다는 시스템 전체의 변화를 포함하는 사례에 설정 변경을 구현하기 위해 우리 팀에 의해 확신했다. 나는이 내 테스트 케이스에 setUp을 정의 할

답변

3

: 당신이 당신이이 작업을 수행 할 필요가 테스트 케이스가 많은 경우

class MyTestCase(unittest.TestCase): 
    def setUp(self): 
     self.system_user = User.objects.create(username=accounts_constants.SYSTEM_USER) 

하면, 기본에 넣어 유용 할 수 있습니다 TestCase 다음 모든 테스트에 대해 상속받습니다.

+0

예,이게 제가 생각한 것입니다 - 기본 TestCase를 상속합니다. 더 좋은 곳이 있는지 궁금 해서요. 나는 아마 이것을 할 것이다. 감사. – Rico

관련 문제