2012-03-15 3 views
0

장고 앱에 대한 몇 가지 테스트를 작성 했으므로 코드를 구조화하는 것이 가장 확실하지 않습니다.장고가 다른 페이지/동작에 의존하는지 테스트합니다.

로그인 페이지와 로그인 한 사용자 전용 페이지가 있습니다. 내 첫 번째 계획은 이전 방법은 페이지를 테스트 로그인 등록하고 나중에 방법을 사용 수행하는 것이 었습니다 :

def test_register_page(self): 
    //send request to register page and check user has been registered correctly 
def test_restricted_page(self): 
    c = Client(); 
    c.login("someUser","pass"); 
    c.post("/someRestrictedPage/"); 
    //Test response 

그러나이 지금 내 테스트 중 하나가 다른에 의존하는 것을 의미합니다.
내가 볼 수있는 대안은 setUp()에서 register를 호출하는 것이지만 여전히 제한된 페이지 테스트가 레지스터 페이지 작업에 의존한다는 것을 의미합니다.

설치 프로그램에서 수동으로 새 사용자를 만들 수도 있습니다.이 사용자는 시스템에서 만든 사용자를 테스트하지 않기 때문에 마음에 들지 않습니다.

이런 상황을 테스트하기위한 일반적인 패턴은 무엇입니까?

답변

1

하나의 테스트 케이스에 많은 기능을 혼합하려고합니다. 깨끗한 디자인은 하나 개의 테스트 케이스를 사용자 등록

  • 및 뷰에 대한
  • 하나를 낳게 될 것이다.

서로 종속되어 있으면 서로간에 많은 의존 관계가 생기게됩니다. 테스트가 실패하면 오류를 디버그하기가 더 어려워집니다. 등록 테스트의 성공 여부는 올바른 사용자 인스턴스 생성 (사용자의 필수 속성 확인 등)을 통해 결정되어야하며 특정 페이지에 로그인 할 수는 없습니다. 따라서 뷰 테스트 케이스에 대해 "올바른"사용자 인스턴스를 설정해야합니다. 이것은 필요한 것보다 조금 더 복잡해 보일지 모르지만, 앞으로의 유지 보수를 훨씬 쉽게 할 것입니다. 은 무엇 당신이하려고하는 것은 전체 시스템을 테스트하지만, 그 전에 당신이 기능 단위에서 시스템을 분리하고 장치를해야 통합 테스트 같은 뭔가 더이 장치에 테스트입니다! 단일 테스트가 작고 잘 정의 된 경우 유지 관리 및 디버깅이 쉬워집니다.

+1

내가 명확하지 않으면 죄송합니다. 이것들은 로그인 된 사용자에 대한 액세스를 제한하고 다른 사용자는 사용자 등록을 테스트하는 두 개의 개별 단위 테스트로되어 있습니다. setup()과 같은 소리는 테스트를 위해 수동으로 사용자를 생성해야합니다. 당신의 도움을 주셔서 감사합니다. – Jim

+0

@Jim :이 주제에서 흥미로운 부분이 있다면 장고에서 단위 테스트를 수행하는 멋진 토론이 있습니다. 특히 테스트 용으로 객체를 만드는 데 편리한 방법을 보여줍니다. https://www.youtube.com/watch?v=ickNQcNXiS4&context = C44039cbADvjVQa1PpcFPQunG_ULh73WnDAl7g7Y8JDYIDmeEZjYQ = –

관련 문제