TDD 개념 스터디

2 minute read

TDD 무료로 공개해주심. 서적의 내용+보강된 내용 블로그에서 참조 https://repo.yona.io/doortts/blog/issue/2

TDD에서 자주사용되는 기능 및 용어

assertThat(); - assertThat 테스트한 값과, 결과값을 비교하여 성공적인 값인지 비교 기능

2장.

JUnit 룰(Rule)

1.TemporaryFolder(임시폴더) -  테스트 메소드 내에서만 사용 가능한 임시 폴더나 임시파일을 만들어준다.
2. ExternalResource(외부 지원) - 외부 자원을 명시적으로 초기화한다.
3. ErrorCollector(에러 수집기) - 테스트 실패에도 테스트를 중단하지 않고 진행할 수 있게 도와준다.
4. Verifier(검증자) - 테스트 케이스와는 별개의 조건을 만들어서 확인할 때 사용한다.
5. TestWatchman(테스트 감시자) - 테스트 실행 중간에 사용자가 끼어들 수 있게 도와준다.
6.TestName(테스트이름) - 테스트 메소드의 이름을 알려준다.
7. Timeout(타임아웃) - 일괄적인 타임아웃을 설정한다.
8. ExpectedException(예상된 예외) - 테스트 케이스 내에서 예외와 예외 메세지를 직접 확인할 때  사용한다.

좋은코드, 나쁜코드 구분방법

좋은코드 - 소설책읽듯 문맥을 갖고 쉽게 읽힌다면 좋은코드 나쁜코드 - 한줄 한줄 의미를 생각하며 따라가는 식으로 분석해야하는 경우는 나쁜코드

3장

테스트 메소드 작성방식

  1. 추가 테스트가 필요없는 기본동작 테스트 시 - 테스트 대상 메소드와 이름을 1:1로 일치시킴
  2. 몇 가지 조건절 테스트가 필요 시 - 테스트 대상 메소드의 이름 뒤에 추가적인 정보 기재
  3. 여러 메소드를 조합해서 테스트가 필요할 시 - 테스트 시나리오에 집중

6장

동치성과 동등성 개념잡기

동치성 - 해당 객체가 표현하고자 하는 상태가 서로 일치하는 지 따져보는 것 동등성 - 같은 객체인가를 판단하는 것

  1. TDD 중요
    실패하는 테스트 케이스 작성한다.
    성공하는 테스트 케이스를 작성한다.
    리팩토링 - 반복되거나 지저분한 비효율적인 코드를 효율적으로 개선하여 작성한다.

  2. 테스트 코드에서는 로그는 비추
    실행되는 테스트 함수명으로 목적을 명확하게 하는게중요.

  3. 테스트 코드에서는 메소드간 의존관계는 없애는게 좋음.

테스트 구현방법 3가지

테스트 ->가짜구현 -> 삼각측량 -> 명백한 구현
테스트 -> 가짜구현 -> 명백한 구현
테스트 -> 명백한 구현

JUNIT 자주사용되는 기능

어노테이션

@Test  
- @Test가 선언된 메서드는 테스트를 수행하는 메소드가 된다.  
- jUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 @Test마다 객체를 생성한다.  


 
@Timeout
 - 테스트 실행 시간을 선언 후 초과되면 실패하도록 설정

@BeforeEach 
 - 각각 테스트 메소드가 실행되기전에 실행되어야하는 메소드를 명시해줌
 @Test, @RepeatedTest, @ParamterizedTest, @TestFactory가 붙은 테스트 메소드가 실행하기 전에 실행된다.

@AfterEach 
 - @Test, @RepeatedTest, @ParamterizedTest, @TestFactory가 붙은 테스트 메소드가 실행되고 난 후 실행된다.

@BeforeAll
- BeforeEach는 각 테스트 메소드 마다 실행되지만, 이어노테이션은 테스트 시작전 딱 한번만 실행된다.

@AfterAll 
- 이것도 위와 같다. 테스트가 완전히 끝난 후 딱 한번만 실행된다.

@ExtendWith(SpringExtension.class) 
- SpringRunner -> SpringExtension 로 변경됨 
- 테스트를 진행할 떄 Junit에 내장된 실행자 외에 다른 실행자를 실행시킨다.

@TempDir
 - 필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공하는데 사용

@WebMvcTest
 - Web에 집중할 수 있는 어노테이션
 - @Controller, @ControllerAdvice등에 사용할 수 있음.
 - 단 @Service , @Componenet, @Repository에는 사용불가함.

@DisplayName
 - 테스트클래스나 테스트 메소드에 이름을 붙여줄때 사용
 
 @Disabled
 - 이 클래스나 테스트를 사용하지 않음을 표시
 

자주사용되는 메서드

assertEquals(a,b); 
 객체 a,b의 값이 일치함을 확인한다.

 assertArrayEquals(a,b);
 배열 a,b의 값이 일치함을 확인한다.

 assertSame(a,b);
 객체 a,b가 같은 객체임을 확인한다.
 두 객체의 레퍼런스가 동일한가를 확인한다.

 assertTrue(a);
 조건 a가 참인가 확인한다.

 assertNotNull(a);
 객체 a가 null이 아님을 확인한다.

Comments