최근에 저는 코드에서 단위 테스트를 사용하려고 시도했으며 원칙적으로 아이디어를 좋아합니다. 그러나 내가 테스트하고자하는 코드의 일부는 단위 테스트만으로는 잘 처리하지 못하는 오류가 발생하기 쉬운 영역입니다. 예를 들어 :외부 라이브러리 및 오류가 발생하기 쉬운 상호 작용의 반자동 테스트
- 네트워크 코드
- 파일 시스템의 상호 작용을
- 데이터베이스 상호 작용 하드웨어
- 통신 (예를 통해 얘기를 전문 장치 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
을하지만, 적어도 나에게 내 코드에서 작업 할 수 있습니다 가정의 검증 세트를 제공하고, 그것은 나를 확인할 수 있습니다 라이브러리를 업그레이드하거나 다른 기본 데이터베이스로 전환 할 때의 가정.
내 질문은 : 더 나은 처리 방법이 있습니까? 이러한 종류의 반자동 테스트를 지원하는 프레임 워크가 있습니까? 아니면 사람들은 일반적으로 테스트 스펙트럼의 끝 부분에서 다른 기술을 사용합니까?
시스템 테스트를 수행하기 위해 단위 테스트 도구와 프레임 워크를 사용할 수 있습니다. 모의가 없으므로 설정이 다소 복잡 할 수 있습니다. 그러나, 그것은 합리적이고 잘 작동합니다. –
동의. 엄밀히 말하면, 단위 테스트 도구를 사용하는 경우 UI가있는 경우 API가 아닌 UI를 통해 앱을 실행하는 경향이 있습니다. 이 경우 시스템 테스트가 아니라 피하 테스트입니다. –