[클린코드] 9장. 단위테스트

노을·2022년 3월 7일
0

cleancode

목록 보기
7/8
post-thumbnail

단위테스트가 없다면 모든 변경이 잠정적인 버그다. (p.157)

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

  • 테스트의 구조 ( given - when - then )
    1. 테스트 자료를 만든다.
    2. 테스트 자료룰 조작한다.
    3. 조작한 결과가 올바른지 확인한다.

  • 테스트 코드는 단순하고 간결하고 표현력이 풍부해야 하지만, 실제 코드만큼 효율적일 필요는 없다.
    public void turnOnCoolerAndBlowerIfTooHot() throws Exception{
        hw.setTemp(WAY_TOO_HOT); 
        contoller.tic(); 
        assertTrue(hw.heaterState()); 
        assertTrue(hw.blowerState()); 
        assertTrue(hw.coolerState()); 
        assertTrue(hw.hiTempAlarm()); 
        assertTrue(hw.loTempAlarm()); 
    }
    
    vs
    
    public void turnOnCoolerAndBlowerIfTooHot(){
            tooHot(); //tic 함수를 숨김
            
            assertEquals("HBchL", hw.getState()); //켜짐:대문자, 꺼짐:소문자
    }
    
    //StringBuffer 대신 String
    public String getState(){
     	String state = "";
        state += heater ? "H" : "h"; 
        state += blower ? "B" : "b"; 
        state += cooler ? "C" : "c"; 
        state += hiTempAlarm ? "H" : "h"; 
        state += loTempAlarm ? "L" : "l"; 
    }

  • 테스트 당 assert 수를 최대한 줄이기
    • 테스트를 분리하면 중복되는 코드가 많아진다. (given, when 부분)
    • 이때 given/when 부분을 부모클래스에 두고 then 부분을 자식 클래스에 두는 방법이나
    • @Before 함수에 given/when 부분, @Test 함수에 then 부분을 넣는 방법이
    • 있으나 배보다 배꼽이 더 크다고 판단되면 하지 않는다.

  • 테스트 당 개념 하나

  • F.I.R.S.T
    • Fast : 테스트는 빠르게 돌아가야 한다.
    • Independent : 서로 의존 X, 한 테스트가 다음 테스트가 실행된 환경을 준비해서는 안된다.
    • Repeatable : 실제환경, QA환경, 네트워크에 연결되지 노트북 환경 등 모든 환경에서 실행되어야 한다.
    • Self-Validating : 성공 아니면 실패, 부울 값으로 결과를 내야 한다.
    • Timely : 단위테스트는 테스트 하려는 시제 코드를 구현하기 직전에 구현한다.

0개의 댓글