테스트 케이스에 사용되는 "setUp"및 "tearDown"Python 메서드를 설명합니다.


96

누구든지 테스트 메서드를 호출하기 직전에 호출되고 호출 된 직후 호출되는 테스트 케이스를 작성하는 동안 Python setUptearDown메서드 의 사용을 설명 할 수 있습니까 ?setUptearDown

답변:


86

일반적으로 setUp에 모든 필수 단계를 추가하고 tearDown에 모든 정리 단계를 추가합니다.

여기 에서 예제를 통해 더 많은 것을 읽을 수 있습니다 .

setUp () 메서드가 정의되면 테스트 실행기는 각 테스트 전에 해당 메서드를 실행합니다. 마찬가지로 tearDown () 메서드가 정의 된 경우 테스트 실행기는 각 테스트 후에 해당 메서드를 호출합니다.

예를 들어 항목이 존재하거나 특정 상태가 필요한 테스트가 있으므로 이러한 작업 (객체 인스턴스 생성, db 초기화, 규칙 준비 등)을 설정에 넣습니다.

또한 각 테스트는 시작된 위치에서 중지해야합니다. 즉, 앱 상태를 초기 상태로 복원해야합니다 (예 : 파일 닫기, 연결, 새로 생성 된 항목 제거, 트랜잭션 콜백 호출 등). 단계는 tearDown에 포함되어야합니다.

따라서 테스트 자체에는 결과를 얻기 위해 테스트 개체에서 수행 할 작업 만 포함되어야하며 setUp 및 tearDown은 테스트 코드를 깨끗하고 유연하게 유지하는 데 도움이되는 메서드입니다.

여러 테스트에 대한 setUp 및 tearDown을 만들고 부모 클래스에서 정의 할 수 있으므로 이러한 테스트를 지원하고 일반적인 준비 및 정리를 쉽게 업데이트 할 수 있습니다.

쉬운 예제를 찾고 있다면 예제 와 함께 다음 링크사용하십시오.


56

이를 사용하여 테스트 스위트의 모든 테스트에 공통적 인 코드를 제외 할 수 있습니다.

테스트에 반복되는 코드가 많으면이 코드를 setUp / tearDown으로 이동하여 더 짧게 만들 수 있습니다.

테스트 데이터 (예 : 가짜 / 모의 설정)를 생성하거나 가짜로 함수를 스터 빙하는 데 사용할 수 있습니다.

통합 테스트를 수행하는 경우 setUp에서 환경 사전 조건 확인을 사용하고 제대로 설정되지 않은 경우 테스트를 건너 뛸 수 있습니다.

예를 들면 :

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())

16
+1 왜냐하면 9 줄의 코드 만 있으면 100 % 그럭저럭 할 수 있습니다. 우아하고 간결한 예. 솔직히 말해서 그 9 줄은 질문 외에 제가 페이지에서 읽은 유일한 것입니다. 코드 샘플 전에 영어로 뭐라고 했나요? 필요하지 않았습니다! 코드는 모든 것을 말해줍니다! 고마워 Matt.
Nathan C. Tresch 2013 년

2
여기에서 "무언가가 제대로 설정되지 않은 경우 테스트를 건너 뛰십시오"가 어떻게 시연되고 있는지 명확하지 않습니다. 아니면 그냥 옆에 있었습니까?
user5359531

6

10 개의 테스트가있는 모음이 있다고 가정합니다. 8 개의 테스트는 동일한 설정 / 해체 코드를 공유합니다. 다른 2 개는 그렇지 않습니다.

설정 및 분해는 이러한 8 개의 테스트를 리팩토링하는 좋은 방법을 제공합니다. 이제 다른 두 가지 테스트로 무엇을합니까? 다른 테스트 케이스 / 스위트로 이동합니다. 따라서 설정 및 분해를 사용하면 테스트를 케이스 / 스위트로 분류하는 자연스러운 방법을 제공 할 수 있습니다.


1
때로는 테스트를 다른 테스트 케이스로 옮기는 것이 바람직하지 않습니다. 이 경우 설정 / 해체 코드로 데코레이터를 작성하고 원하는 테스트 기능 만 데코레이션 할 수 있습니다.
Matthijs

2
이것은 결코 질문에 대한 답이 아닙니다.
19:56에 gented
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.