본문 바로가기

도서/Clean Code

[Clean Code/클린 코드] 9장 단위 테스트

9장 단위 테스트

📖  깨끗한 테스트 코드를 만들려면? 세 가지가 필요하다. 가독성, 가독성, 가독성.

 

 

목차

     


    🗒️ 책에서 기억하고 싶은 내용

    TDD 법칙 세 가지

    1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.   
    2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.   
    3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

     

    테스트 당 assert 하나

    public void testGetPageHierarchyAsXml() throws Exception {
      givenPages("PageOne", "PageOne.ChildOne", "PageTwo");
    
      whenRequestIsIssued("root", "type:pages");
    
      thenResponseShouldBeXML();
    }
    
    public void testGetPageHierarchyHasRightTags() throws Exception {
      givenPages("PageOne", "PageOne.ChildOne", "PageTwo");
    
      whenRequestIsIssued("root", "type:pages");
    
      thenResponseShouldContain(
        "<name>PageOne</name>", "<name>PageTwo</name>", "<name>ChildOne</name>"
      );
    }

    위에서 보듯이, 테스트를 분리하면 중복되는 코드가 많아진다.

    중복 제거
    ●  given/when 부분을 부모 클래스에 두고 then 부분을 자식 클래스에 두면 된다.
    ●  아니면 완전히 독자적인 테스트 클래스를 만들어 @Before 함수에 given/when 부분을 넣고 @Test 함수에 then 부분을 넣어도 된다.

    가장 좋은 규칙
    ●  하나의 함수에 assert문 수를 최소로 줄여라
    ●  테스트 당 개념을 하나만 테스트하라

     

    F.I.R.S.T

    Fast 빠르게 : 테스트는 빨리 돌아야 한다.   
    Independent 독립적으로 : 각 테스트는 서로 의존하면 안 된다.   
    Repeatable 반복가능하게 : 테스트는 어떤 환경에서도 반복 가능해야 한다.   
    Self-Validating 자가 검증하는 : 테스트는 부울(bool)값으로 결과를 내야 한다.   
    Timely 적시에 : 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다.

     

    🗒️ 소감

    테스트를 분리하면 중복되는 코드가 많아지는데 이를 해결하는 부분이 인상적이었다. 아직 테스트 코드를 작성해 본 경험이 적고 낯설어서 앞으로 더 많은 코드를 보고 따라 작성해 보아야겠다고 생각했다.

    테스트 이야기는 아니지만, `이중 표준`에서 저자가 테스트 코드 뿐만 아니라 실제 코드에서도 크게 무리가 아니라면 StringBuffer를 피한다는 것을 보고 이유가 무엇인지 궁금해졌다.

     

    🗒️ 궁금하거나 어려웠던 내용

    X