우테코 문자열 계산기를 통한 TDD 학습
테스트 코드 네이밍
실제 운영에 배포를 할 때는 warning 메시지를 보면서 문제의 소지가 있는 것들을 파악해 나가야 한다
이럴 떄 한글 등으로 인한 경고는 불필요한 확인을 하게 된다
@Test
메서드 작성시 한글을 쓰고자할 때는
- 메서드명에 적고
@SuppressWarnings("NonAsciiCharacters")
처리를 하거나
- 모든 메서드 마다 달기는 그러니.. 클래스 레벨에
@DisplayName
을 사용해서 표기하고
- 메서드 명에 영어를 대충 적는다
- 한글 따로 영어 따로는 체력적인 소모가 나간다..
그외 ..
- 테스트 메서드명에 snake case를 써도 상관 없다
TDD 사이클
Red -> Green -> Refactor
Red
: 우선 실패하는 테스트를 작성한다Green
: 테스트를 통과하는 실제 코드를 최소한으로구현
한다Refactor
: 실제 코드를 가다듬는다
최소한의 기능을 구현하는 곳은 Reg -> Green 일 때다 !
커밋을 자주 하는게 좋은가요??
매 요구사항이나 기능 구현마다 커밋을 하는 것은 맞지만..
아주 작은 기능에서 조차 커밋을 나누는것은 생각해보아야 한다..
커밋을 나누는 것은 비용이기 떄문이다
다만 테스트가 깨지는 상태거나.. 컴파일 에러가 나는 상황에서는 커밋하면 안됀다!
private method 테스트
정말로 필요한 테스트인지 고민을 한다.
- 오죽하면 이런 사이트도 있다.. should i test private method ? : NO
만일 접근제어자를 수정할 정도로 필요한 테스트이면 수정한다
default
접근제어자를 적절히 활용하여 테스트한다- 접근제어자를 생략하면 된다
운영 코드에 손상이 가지 않게 메서드를 카피해서 테스트한다
해당 private 메서드를 호출하는 public 메서드를 통해 간접적으로 테스트한다
리플렉션은 비추한다
한번에 구현하기 어려운 코드는
테스트 메서드에 순차적으로 구현한 뒤에 실제 구현 코드로 이동시킨다 !
한 테스트 메소드에서 assert 문을 여러개 사용하는것은 좋지 않은 방법인가요?
BE_후디님 질문
테스트 코드를 assertThat 문.. 여러개 작성하는 것은 좋지 않다..
하나의 assertThat으로 인해 그 다음의 assertThat이 수행되지 않을 수 있다
해당 메서드에서 검증을 해야하는 것이 여러가지 일을 하지 않나 생각을 해보아야 한다
Equals
, HashCode
를 꼭 정의해야 하나요?
Equals
, HashCode
, ToString
등은 객체임을 잘 나타내는 메서드이기 떄문에
(강사님은) 굳이 사용하지 않더라도 미리 만들어 놓고 사용하는 것을 선호하신다 !
(크루분이 정리해주셨다 !) 강타입 언어 ??
means that the type of a value doesn’t change in unexpected ways.
항목 | 설명 |
---|---|
강타입 언어(Strongly Typed Language) | 자료형이 맞지 않을 시에 에러 발생, 암묵적 변환을 지원하지 않음 |
약타입 언어(Weakly Typed Language) | 자료형이 맞지 않을 시에 암묵적으로 타입을 변환하는 언어 |
항목 | 설명 |
---|---|
정적타입 언어 (Static Typed Language) | 정적타입 언어는 컴파일 시에 변수의 타입이 결정되는 언어를 의미한다. |
동적타입 언어 (Dynamic Typed Language) | 동적타입 언어는 런타임 시 자료형이 결정되는 언어를 의미한다. |
예를들어
자바는 정적
타입 강
타입 언어이다.
파이썬은 동적
타입 강
타입 언어이다.
JS는 동적
타입 약
타입 언어이다.