@SpringBootTest가 붙으면 Application Context에 의존성 주입 오류(NoSuchBeanDefinitionException) 없이 테스트에 필요한 모든 의존성을 제공해준다. 여러 객체들을 빈으로 등록해서 전체적인 통합 테스트를 진행할 때 사용할 수 있다. @SpringBootTest 내부 확인 맨 아래부터 보면 Junit Jupitier(Junit5의 일부)의 SpringExtension을 등록한 것을 볼 수 있다. SpringExtention은 Spring TestContext 프레임워크를 Junit5의 Jupiter 프로그래밍 모델에 통합한다. 이 extension은 테스트 프레임워크와 스프링의 원활한 통합을 위해 필수적이다. @BootstrapWith는 Sprint TestC..
TDD
테스트 더블 테스트 더블이란 실제 프로덕션 코드에서 쓰이지 않는 객체를 사용해 테스트를 진행하는 것을 의미한다. 애플리케이션을 개발할 때 테스트 코드도 프로덕션 코드 못지않게 중요하다. 그 중요한 테스트 코드를 왜 실제 객체가 아닌 다른 객체로 테스트를 하는 것일까? 다른 이유도 있겠지만 다음의 두 가지 이유가 중요하다고 생각한다. 1. 테스트 하려는 객체와 연관된 객체가 사용하기 어려운 경우 2. 테스트 하려는 객체와 연관된 객체의 상태에 상관없이 테스트하고자 하는 객체만 테스트하고 싶은 경우 어찌보면 비슷한 말이다. 즉 연관된 객체와 테스트하고자 하는 객체를 분리하고 싶은 것이다. 연관된 객체에 문제가 생기더라도 테스트하고자 하는 객체의 테스트는 통과할 수 있어야 옳게 된 단위 테스트이다. (물론 연..
우아한테크코스 로또 미션을 진행하던 중 두 리스트를 비교하여 테스트할 일이 있었다. @Test @DisplayName("수동 로또 번호 생성 검증") void createLottoTicketsByManual() { List lottoNumbers = List.of(List.of(1, 2, 3, 4, 5, 6), List.of(7, 8, 9, 10, 11, 12)); List lottoTickets = lottoMachine.purchaseLottoTicketsByManual(lottoNumbers); Iterator iterator = lottoNumbers.iterator(); for (LottoTicket lottoTicket : lottoTickets) { List ticketNumbers = lo..
Junit은 자바에서 사용하는 유닛 테스트 프레임워크이다. 요즘 자바로 TDD(테스트 주도 개발)를 연습하고 있는데 공부할 겸 Junit5 어노테이션을 정리하고자 한다. Junit은 어노테이션으로 다양한 기능을 제공한다. @Test 테스트 메서드임을 나타낸다. @Test void 테스트() { //... } @ParameterizedTest 매개변수를 받아서 여러 입력에 대한 결과를 한 번에 테스트할 수 있다. @ParameterizedTest @ValueSource(strings = {"dog", "cat"}) void 매개변수_테스트(String input) { // ... } 여러 입력에 다른 결과를 테스트하고 싶을 때 사용하는 방법이다. @ParameterizedTest @CsvSource(val..
우테코 1주차 금요일, 문자열 덧셈 계산기 미션에 대한 피드백을 받으며 TDD에 대해 강의를 들을 수 있었다. TDD란 테스트 주도 개발의 약자로 이름에서도 알 수 있듯이 테스트를 중심으로 개발하는 방법이다. 기본적인 흐름으로는 위 그림처럼 실패하는 테스트를 먼저 짠 뒤에 구현을 해서 테스트를 통과시킨 다음 리펙토링을 한다. 이번 포스팅의 내용은 강의를 바탕으로 Junit, java를 사용하여 TDD를 하는 방법에 대해 정리한 것이다. 테스트 코드부터 짠다. 구현을 위한 프로덕션 코드를 구현하기 전에 실패하는 테스트 코드부터 작성한다. 아직 만들어지지 않은 클래스나 함수가 있어 컴파일 에러가 날 것이다. 테스트 코드 하나 만들고 프로덕션 코드를 작성하러 간다 여러 테스트 코드를 한 번에 만들고 프로덕션 ..