클린 코드를 위한 테스트 주도 개발 1.2

전호종·2021년 3월 4일
0

TDD

목록 보기
5/6

기능 테스트를 이용한 최소 기능의 애플리케이션 설계

셀레늄울 이용한 테스트에서는 실제 웹 브라우저를 실행해서 애플리케이션이 어떻게 "동작"(function)하는지 사용자 관점에서 확인할 수 있다. 따라서 이러한 테스트를 기능 테스트(Functional Test 이하 FT) 라고 부른다.

또한, FT 자체가 애플리케이션 사양이 될 수 있음을 의미하기도 한다. 사용자 스토리(User Story) 방식을 따르는 경향이 있는데, 사용자가 시스템 내부에 대해서 전혀 알지 못하지만 특정 기능을 어떻게 사용하며 이때 애플리케이션이 어떻게 반응해야 하는지를 확인하는 방식이다.

결국 사람이 이해할 수 있는 스토리를 가지고 있어여 한다. 따라서 테스트 코드에 주석을 사용해 기록한다. 애플리케이션 요구사항과 특징을 FT를 보고 논의할 수 있을 정도가 돼야 한다.

1.1에서 작성한 FT 파일에 사용자 스토리를 주석을 사용해 작성해본다.

참고) 옳바른 주석 사용...
다음과 같은 주석은 redandunt(불필요한) 주석이다.
가장 이상적인 방법은 이해할 수 있는 변수명이나 함수명을 사용하고 프로그램 구조를 잘 만들어서 코드 자체만 보고도 해석이 가능하도록 하는 것이다. 이렇게 하면 어떤 코드인지 설명하는 주석을 굳이 사용하지 않아도 된다. 중요한 곳에만 코드 사용의 이유를 설명해두면 되는 것이다.

# wibble 값을 1 늘린다.
wibble += 1 

예상된 오류
의도적으로 구현한 테스트 실패를 의미한다.
테스트 실패에 대한 정당한 이유를 가지고 있기 때문에 테스트를 제대로 작성했다는 자신감을 가져도 좋다.

파이썬 기본 라이브러리의 unittest 모듈

"AssertionError" 메세지는 구체적이지 못해서 도움이 되지 못한다.
unittest 모듈을 사용하면 구체적인 디버깅 정보를 알 수 있다.

클래스 정의

나머지는 이전에 작성했던 사용자 스토리 주석과 같고 가장 밑에 다음 코드를 작성한다.

코드설명

  • setUptearDown은 특수한 메소드로, 각 테스트 시작 전과 후에 실행된다.
    브라우저를 열고 닫을 때 사용되었다.

  • test_cat_start_a_list_and_retrieve_it_later라는 메소드 테스트 메인 코드다.
    test라는 명칭으로 시작하는 모든 메소드는 테스트 메소드이며 테스트 실행자에 의해 실행된다.
    클래스당 하나 이상의 테스트 메소드를 작성할 수 있다.

  • assert 대신에 self.assertIn을 사용한다. unittest는 테스트 어설션을 만들기 위해 유용한 함수를 제공한다.
    ex) assertEqual, assertTrue, assertFasle ...

  • self.fail은 강제적으로 테스트 실패를 발생시켜 에러 메세지를 출력한다. 테스트가 끝났다는 것을 알리기 위해 사용되었다.

  • if __name__ == '__main__'은 파이썬 스크립트가 다른 스크립트에 임포트된 것이 아니라 커맨드라인을 통해 실행되었다는 것을 확인하는 코드다.

  • warnings = 'ignore'텍스트는 테스트 작성 시에 발생하는 불필요한 리소스 경고를 제거하기 위한 것이다.

에러 확인
몇 개의 테스트가 실행됐고 그중에서 몇 개가 실패했는지 보여주며
조금 더 구체적인 에러 메세지를 확인할 수 있다.

커밋

커밋을 남발하거나 잊어버리거나 하는 경우가 있다.
언제 커밋을 하는 것이 적절한지 잘 모르기 때문이다.

저자는 지금이 커밋을 하기에 좋은 타이밍이라고 알려주고 있다.
매우 명확한 변경 내용을 반영할 수 있어야한다!

기능 테스트에 우리가 설정한 스토리를 주석으로 포험시켰고 unittest 모듈과 모듈에 포함된 다양한 테스트 함수들을 추가했다.

0개의 댓글