📜 제목으로 보기

TDD 싸이클

  • TDD 구현
    • 싸이클
      1. fail떨어지는 test코드 생성
        • case별로 메서드_이름을 표기하여 작성한다.
      2. main(프로덕션)코드 작성 후 pass
        • 2번째부터는 개별 pass -> 전체pass 순으로 확인
      3. refactoring(rename부터 시작)
  1. test에서 package > XXXTest class를 먼저 만든다.

    image-20220210002321626

    • generate(alt+insert)기능으로 @test로 생성

    • 메서드_명은 한글명으로 해도 되고, 단위테스트가 의미하는 바만 잘 나타내면된다. 여기선 여러 경우 중 1가지(구분자 없는) 경우로 시작을 한다.

    image-20220210002132357

  2. 클래스명 + 메소드명을 먼저 사용하여 할당을 반환형 actual변수로 받은 뒤 image-20220210002420978
    • given(값 -> 변수 선언 등) -> when(actual까지 로직) -> then( asesertThat(actual).isEqualTo(expected))

            // given
            String data = "(1,2)";
      
            // when
            String result = data.substring(1, data.length()-1);
      
            // then
            assertThat(result).isEqualTo("1,2");
      
  3. assertThat( actual ).isEqualTo( )에서 인자에 예상값(우리가 원하는 값)을 넣는다.image-20220210002750670

  4. SC 없는 클래스를 만들 되, 미리 main쪽에 package를 만들어 놓은 상태에서 -> 생성경로를 main으로 바꿔준다. image-20220210003428318 image-20220210003615119

    • test > package > XXXTest class
    • 내부 XXX클래스.메서드() —> main > package > XXX class로 생성
    • test에만 존재하는 package를 선택하면, main에 못만드니 미리 만들어놔야한다. image-20220210003637496
  5. **클래스 생성 직후 바로 돌아와(Back기능 ctrl+u) method도 만들어준다 **

    • 이 때, actual(1)을 반환하지 않는 불완전한 메소드를 수정없이 test실행부터해서 Error를 낸다

      image-20220210004142871 image-20220210004155379 image-20220210004242837

  6. test코드(SCTest)가 pass하도록 프로덕션코드(main코드, SC)를 수정한다.

    image-20220210004534897 image-20220210004546088

  7. pass한 프로덕션 메소드를 refactoring한다.

    • 파라미터 이름 바꾸는 것도 F2 = refactoring image-20220210004747129
    • @test 막 사용했던 class이름(XXX) 바꾸는 것도 F2 = refactoring
      • 이 때, test class이름 XXXTest도 바꾸자고 권유한다. image-20220210004912329 image-20220210004929527
  8. 더이상 refactoring할게 없다면 -> 새로운 단위테스트를 클래스.메소드()부터 만들어서 나아간다.

    • 직전에 만든 테코랑 비슷하다면, 복붙해서 시작한다.

    • 테케는 가능한 가장 작은 단위를 만드는 경우며, 케이스 -> if 상황별 새로운 메소드 나누고 -> 상황에 맞게 인자 변경 -> expected

      • 구분자 없음 -> “1” -> 1
      • 컴마 구분자 -> “1,2” -> 3

      image-20220210011954592

  9. 다음 테케도 프로덕션 코드 수정없이 일단 돌려서 fail을 떨어뜨린 뒤-> 에러보고 참고하여 찾아가서 수정 image-20220210012202908

  10. 해당 테케실행 -> 전체 테케도 실행해서 전체 통과하는지 확인을 한다. image-20220210012607222

  11. pass후엔 refactoring하기

    • for문으로 들어가는 indent -> 메소드 추출 refactoring

      • return문까지 잡아서 추출해보기(alt+ctrl+m -> 안되면 ctrl+.)

        image-20220210013249462

  12. input/output이 명확한 쉬운 TDD였다.

    • 자동차 경주를 하려면, 너무 힘들 것
    • 단위테스트만 만들어서 해볼 것
    • fail하는 test생성 -> 프로덕션수정으로 pass -> refactoring