좋은 부분 (3) – Act – Act 가 한 줄 이상인 경우를 경계할 것 → 캡슐화가 깨지는 것을 경계하기 – 동작단위를 검증해야 유지보수가 쉬움 – 세부 구현을 검증하지 않도록 해야 – 캡슐화가 깨져서 모순이 생기는 경우 → 불변 위반(invariant violation)
좋은 부분 (3) – Assert – 검증 구절은 동작의 결과를 평가할 정도로만 있으면 됨 – 너무 많으면 추상화가 깨지지 않았는지 검토하기 – 가장 좋은 경우: 동등 멤버(equality member)를 정의 → (🐍) 객체의 동일성 검증을 위해 __eq__() 매직 메소드를 정의하는 것을 의미 • 종료(teardown) 구문? – 단위 테스트는 프로세스 외부에 종속적이지 않기 때문에 사이드 이펙트가 적음 – 이는 통합 테스트의 영역. (3부에서 봅시다)
xUnit을 소개 – setup(), teardown() 메소드로 테스트 전/후의 상황을 설정하고 정리 – SUT에 대해 단독 케이스를 개별 명세처럼 남길 수 있음을 좋아함 • 파이썬 에서는? – unittest, pytest 모두 xUnit 스타일에 가까움 – unittest는 xUnit 스타일의 코드를 선보임 – pytest는 파이썬 스러운 스타일의 코드를 선보임
중 아래 관습이 있다고 합니다 – [테스트대상메소드]_[시나리오]_[예상결과] – 테스트 중인 메소드 이름 + 메소드 테스트 조건 + 시나리오 예상결과 – 이걸 따르면? • test_isdeliveryvalid_invaliddate_returnsfalse ???????????????
배송을 올바르게 식별하는 코드니까 – Delivery_with_invalid_date_should_be_considered_invalid 이정도면? → invalid_date를 보다 정확하게 명시하자 – Delivery_with_past_date_should_be_invalid 이정도면? → should be 대신 is 를 쓰는 편이 나음 – Delivery_with_past_date_is_invalid 이정도면? → 영문법을 아는 만큼 맞춥시다 – Delivery_with_a_past_date_is_invalid 이정도면?
케이스? – Delivery_with_a_past_date_is_invalid에 대해… – 가장 빠른 배송일이 오늘로부터 이틀 후가 되도록 작동하는 기능이 명세라고 하면? – 오늘, 내일은 invalid, 이틀 후는 valid인 경우… – 테스트 케이스가 3개나 나오지만 – 사실 한 테스트에 대해 매개변수만 바꿔주면 됩니다