2010-03-02 3 views
3

최근에 저는 코드에서 단위 테스트를 사용하려고 시도했으며 원칙적으로 아이디어를 좋아합니다. 그러나 내가 테스트하고자하는 코드의 일부는 단위 테스트만으로는 잘 처리하지 못하는 오류가 발생하기 쉬운 영역입니다. 예를 들어 :외부 라이브러리 및 오류가 발생하기 쉬운 상호 작용의 반자동 테스트

  • 네트워크 코드
  • 파일 시스템의 상호 작용을
  • 데이터베이스 상호 작용 하드웨어
  • 통신 (예를 통해 얘기를 전문 장치 RS-232) 타사 라이브러리를 황당하기
  • 통화

모의 개체는 일반적으로 이러한 상황에서 사용되는 것으로 알고 있지만 자신감을 느끼는 방법을 찾고 있습니다. 모자는 모의 객체가 이고 정확하게 테스트하려는 상황을 시뮬레이트하는입니다.

예를 들어, 데이터베이스 서버가 다시 시작될 때 일어나는 일을 시뮬레이트하는 mock을 쓰고 싶다고 가정 해 보겠습니다. 이렇게하려면 먼저 DB 서버를 다시 시작하면 실제로 사용중인 데이터베이스 라이브러리가 특정 예외를 throw하는지 확인해야합니다. 바로 지금, 내가 좋아하는 코드 작성 :이 수동 작업의 상당한 양을 필요로 실행

def checkDatabaseDropout(): 
    connectToDatabase() 
    raw_input("Shut down the database and press Enter") 
    try: 
     testQuery() 
     assert False, "Database should have thrown an exception" 
    except DatabaseError, ex: 
     pass 

을하지만, 적어도 나에게 내 코드에서 작업 할 수 있습니다 가정의 검증 세트를 제공하고, 그것은 나를 확인할 수 있습니다 라이브러리를 업그레이드하거나 다른 기본 데이터베이스로 전환 할 때의 가정.

내 질문은 : 더 나은 처리 방법이 있습니까? 이러한 종류의 반자동 테스트를 지원하는 프레임 워크가 있습니까? 아니면 사람들은 일반적으로 테스트 스펙트럼의 끝 부분에서 다른 기술을 사용합니까?

답변

1

나는 이런 종류의 것들을 예상하지 않으려 고 노력합니다.

하루가 끝날 무렵 100 % TDD에 가깝지만 시스템 전체를 구축 중이므로 전체 애플리케이션이 예상대로 실행되는지 테스트합니다. 그러한 시스템 테스트 당신이 얘기하는 시나리오의 종류를 캡처하고 재현 할 수 있습니다.

주어진 시나리오를 재현하는 방법을 알았 더라면 언제나 그것을 재현하는 단위 테스트를 작성할 수 있습니다.

그래서 다른 말로, 저는 현재 두 가지 구성 작업을하는 경향이 :

  • 완전 자동화 된 장치는
  • 수동 시스템 테스트를 테스트합니다.

이들은 상호 작용하고 서로에게 먹이를 줄 수 있으며 반복적으로 작업 할 때마다 더 쉽고 잘 작동합니다.

+0

시스템 테스트를 수행하기 위해 단위 테스트 도구와 프레임 워크를 사용할 수 있습니다. 모의가 없으므로 설정이 다소 복잡 할 수 있습니다. 그러나, 그것은 합리적이고 잘 작동합니다. –

+0

동의. 엄밀히 말하면, 단위 테스트 도구를 사용하는 경우 UI가있는 경우 API가 아닌 UI를 통해 앱을 실행하는 경향이 있습니다. 이 경우 시스템 테스트가 아니라 피하 테스트입니다. –

관련 문제