2009-10-16 14 views
16

HTTP 서버로 실행되는 응용 프로그램의 일부에 대한 단위 테스트를 작성하고 있습니다. 내가 취하려고 시도한 접근 방식은 HTTP 서버가 포함 된 모듈을 가져 와서 시작하는 것입니다. 그런 다음 단위 테스트는 urllib2를 사용하여 데이터를 연결하고 데이터를 보내고 응답을 확인합니다.Python - Twisted and Unit Tests

HTTP 서버가 Twisted를 사용 중입니다. 여기서 하나의 문제는 Twisted에 익숙하지 않다는 것입니다.

이제 HTTP 서버를 인스턴스화하고 setUp() 메소드에서 시작한 다음 tearDown() 메소드에서 중지합니다.

문제는 Twisted가 이와 같이 보이지 않으며 하나의 단위 테스트 만 실행한다는 것입니다. 첫 번째 이후에는 원자로가 더 이상 시작되지 않습니다.

검색 및 검색하고 검색 한 결과 말이 맞지 않습니다.

나는 완전히 잘못된 접근법을 사용하고 있습니까?

답변

17

여기에 몇 가지 정보입니다. 재판에서 좋은 물건이 많이 있어요! 그러나 비동기 응용 프로그램에서 테스트를 수행하는 것이 항상 쉬운 것은 아닙니다. 행운을 빕니다!

7

Twisted의 단위 테스트에서는 TwistedTrial (핵심 구성 요소, 즉 twisted/trial 디렉토리의 Twisted tarball과 함께 제공됨)을 사용해야한다고 생각합니다. 그러나 내가 지적했듯이, 문서는 대부분 소스를 통해 살펴볼 수 있습니다 (다양한 Twisted 프로젝트의 소스를 포함하여 Trial로 테스트 됨). Writing tests for Twisted code using Trial

또한 재판 명령의 -help 봐야한다 :

3

반응기를 다시 시작하면 충돌이 발생하는 Twisted (아마도 고정되지는 않음)가있는 known bug이 있습니다.

이것은 단위 테스트가 작동하지 않는 이유입니다.

Trial뿐만 아니라 클라이언트의 의지와 같이 HTTP 서버와 통신하는 별도의 테스트 시스템을 고려할 수도 있습니다.

  • Webdriver - 사이트에서 브라우저 세션을 실행하는 API입니다.
  • TestGen4Web - 사이트와의 상호 작용을 기록하고 재생할 수있는 Firefox 플러그인.
4

다른 언급했듯이 Twisted의 단위 테스트에는 Trial을 사용해야합니다.

또한 단위 테스트에서보아야합니다. 단위 테스트의 "단위"가 의미하는 바입니다. 인터페이스를 테스트하기 전에 데이터와 로직을 테스트하십시오. HTTP 인터페이스의 경우 모의 요청으로 processGET, processPOST 등을 호출해야하지만 이러한 메소드가 호출하는 것을 테스트 한 후에 만해야합니다. 각 테스트는 다른 곳에서 테스트 된 단위가 설계된대로 작동한다고 가정해야합니다.

HTTP를 사용하고 있거나 실행중인 서버 또는 다른 상태가 필요한 경우 기능 테스트 또는 통합 테스트와 같은 상위 테스트를 수행하고있을 가능성이 있습니다. 이것은 나쁜 것은 아니지만 질문을 수정하는 것이 좋습니다.

+0

당신은 내가 당신이 옳다고 생각합니다.솔직히 저수준 단위 테스트를 수행하기 위해해야 ​​할 일은 "요청"객체를 가짜로 만드는 것입니다 (일부 함수는 꽤 많이 사용합니다). – Dave