컴포넌트: 프로그래밍에 있어 재사용이 가능한 각각의 독립된 모듈

단위테스트 프레임워크 -> junit
: 명확한 작업의 한 단위의 동작을 검사하는 테스트
⭐️ 메서드가 기대 범위의 입력을 받아, 각 입력에 대해 기대한 값을 반환하는지 확인하라
단위테스트의 모토:
프로그램에서 자동화된 테스트를 거치지 않은 기능은 존재하지 않는다
프레임워크: 거의 완성된 애플리케이션으로 여러 애플리케이션에서 공유할 수 있는 재활용 가능하고 보편적인 구조를 제공한다
개발자들은 이 프레임워크를 자신의 애플리케이션에 통합하고, 특정 요구사항에 부합하도록 기능을 확장할 수 있다. 응집성 높은 구조를 제공한다는 점에서 단순 유틸리티 클래스의 집합인 툴킷과 구분된다
단위테스트, 통합테스트, 인수테스트
API 계약: 애플리케이션 프로그래밍 인터페이스(API)를 호출자와 피호출자간의 공식 합의로 바라보는 관점
프로그램 기능 검증
올바른 결과를 반환하는지를 알고 싶을 뿐 프로그래머가 숫자를 정확히 타이핑하는지는 관심밖이다.
애플리케이션이 완성되어 배포될 때 혹은 어딘가 수정이 발생할 때마다 여전히 잘 동작하는가?
테스트 프로그램의 추가 확장도 용이해지도록 구조를 모듈화
메인 메서드의 경우 오류 발생시 스택 추적 정보 출력
⭐️단위테스트 규칙 3가지
클래스 로더 인스턴스
리플렉션, 인트로스펙션
junit은 이미 인트로스펙션 방식을 제공
텍스트 기반 테스트 러너
가장 먼저 테스트 클래스를 정의
: 반드시 public이어야 한다는 제약을 지킨다면 어떤 이름도 상관없고, 일반적으로 Test로 끝나는 이름 사용
@Test 어노테이션 선언
: 권장하는 테스트 메서드명??
테스트 대상 객체 생성
테스트 대상 메서드 호출
assertEquals로 결과 비교
junit의 핵심
테스트 메서드의 조건
junit은 테스트 메서드를 실행할 때마다 테스트 클래스의 인스턴스를 새로 생성한다
이유는 부작용 방지를 위해