TDD 개념 스터디
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로 일치시킴
- 몇 가지 조건절 테스트가 필요 시 - 테스트 대상 메소드의 이름 뒤에 추가적인 정보 기재
- 여러 메소드를 조합해서 테스트가 필요할 시 - 테스트 시나리오에 집중
6장
동치성과 동등성 개념잡기
동치성 - 해당 객체가 표현하고자 하는 상태가 서로 일치하는 지 따져보는 것 동등성 - 같은 객체인가를 판단하는 것
-
TDD 중요
실패하는 테스트 케이스 작성한다.
성공하는 테스트 케이스를 작성한다.
리팩토링 - 반복되거나 지저분한 비효율적인 코드를 효율적으로 개선하여 작성한다. -
테스트 코드에서는 로그는 비추
실행되는 테스트 함수명으로 목적을 명확하게 하는게중요. -
테스트 코드에서는 메소드간 의존관계는 없애는게 좋음.
테스트 구현방법 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