ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Test Driven Development By Example 2부 정리
    기타/북스터디 2022. 6. 4. 00:07

    xUnit 예시

    • 테스트를 위한 도구 구현하기

     

    1. xUnit으로 가는 첫걸음

    • 첫 번째 작은 단계는 아직 프레임워크가 없기때문에 테스트 케이스를 수동으로 검증하자.
    두 번째는 테스트 프레임워크에 대한 할 일 목록 정리하기.테스트 메서드 호출하기setUp 호출하기
    나중에 tearDwon 호출하기
    테스트 메서드가 실패하더라도 tearDown 호출하기
    수집된 결과를 출력하기
    • 클래스를 정의하기 전에 테스트 코드부터 작성하기
    • 테스트 코드가 초록 막대가 뜨게 클래스와 메서드를 정의하고 리팩토링 진행하기
    • 리팩토링의 일반적인 패턴
      • 하나의 특별한 사례에 대해서만 작동하는 코드를 가져다가 다른 여러 사례에 대해서도 작동할 수 있도록 상수를 변수로 변화시켜 일반화하는 것

    질문

    • p.161: 자기참조 프로그래밍이 뭐지?
    • p.164: 왜 테스트 메서드를 직접 호출하는 대신 진짜 인터페이스인 run()메서드를 사용하는 것이지?
    • p.164: 두 부분을 서로 분리하여 각각에 따로 작업할 수 있다에서 말한 두 부분이 run과 testMethod를 의미하는 것인가?

    용어정리

    • 부트스트랩이란 In computers, the word bootstrap means to boot: to load a program into a computer using a much smaller initial program to load in the desired program (which is usually an operating system)
    • 플러거블 셀렉터(pluggable selector)란 Replace subclasses with dynamically generated method calls. 장점은 객체 별로 서로다른 메서드가 동적으로 호출되게 함으로써 필요 없는 하위클래스의 생성을 피한다. (run메서드를 의미하는 듯)

     

    2. 테이블 차리기

    • 테스트를 작성하다보면 공통된 패턴을 발견하게 될 것임.
      1. 준비(arrange): 객체를 생성
      2. 행동(act): 어떠한 자극을 준다.
      3. 확인(assert): 결과를 검사한다.
    • 위 패턴이 서로 다은 스케일에서 반복된다면 테스트를 위해 새로운 객체를 얼마나 자주 생성해야 하는가하는 문제에 직면하게 되고 두 가지 제약이 상충함
      • 성능: 테스트가 최대한 빨리 실행되길 원하고 여러 테스트에서 같은 객체를 사용하면 객체를 하나만 생성해서 공용적으로 사용하면 됨
      • 격리: 한 테스트에서의 성공이나 실패가 다른 테스트에 영향을 주지 않기를 원함

    질문

    • p.173: testSetUp(self)에서 첫 번째 선언문 self.test.setUp()이여야하는 것아닌가?

     

    3.  뒷정리하기

    • 종종 setUp()에서 외부 자원을 할당하는 경우가 있고 테스트가 계속 서로 독립적이길 원한다면 tearDown()메서드 같은 곳에서 자원을 다시 반환할 필요가 있음

    질문

    • p.176: testSetUp(self)에서 첫 번째 선언문 self.test.setUp()이여야하는 것아닌가?
    • 파이썬 이해도가 낮아 코드를 이해하기 어렵다...

     

    4. 셈하기 ~ 5. 실패 처리하기

    • 테스트가 작동하도록 하려면 예외를 잡아야하고 현재까지의 구현에서는 예외가 보고되지 않기 때문에 이를 위한 작업 진행.
    • 테스트 결과를 반환해주는 클래스를 만들고 n개 성공 n개 실패라는 결과문을 봔환해줌.

     

    6. 얼마나 달콤한지

    • 어떠한 것을 하고 싶은지는 알겠는데 내용을 이해하기 어려움
      • testSuite메서드에서 왜 2run, 1failed일까? 1 run, 1 failed아닌가?
    • 코드의 중복성 제거를 위해 하나의 메서드로 여러 테스트를 돌리는 testSuite를 만들었지만 코드 가독성은 떨어졌다.

    용어정리

    • 컴포지트 패턴이란
    • 매개변수 수집(collecting parameter)란 

    댓글

Designed by Tistory.