Spring

· Spring
앞서 무엇을 테스트할 것인가? 에 대한 정리를 해보았다. 무엇을 테스트 할 것인가? - (1) 테스트를 작성할수록 테스트를 얼마나 자세하게, 어떤 것을 테스트 해야하는 지 등의 고민이 점점 커졌다. 그렇게 레퍼런스를 찾던 중 2019년에 진행된 스프링캠프에서 진행된 좋은 세션을 발견 dongb.tistory.com 이번에는 어떻게 테스트할 것인가에 대해 정리를 이어보겠다. 어떻게 테스트할 것인가? 1. 테스트 가능한 것, 불가능한 것 "테스트 불가능한 영역을 Boundary Layer로 올려서 테스트 가능하도록 변경" 그렇다면 우리는 위의 상황에서 어떻게 코드를 구성해야 테스트 커버리지를 키울 수 있을까? 테스트할 수 없는 메소드를 Boundary 영역까지 끌어올리면 테스트할 수 있는 영역을 많이 확보할..
· Spring
테스트를 작성할수록 테스트를 얼마나 자세하게, 어떤 것을 테스트 해야하는 지 등의 고민이 점점 커졌다. 그렇게 레퍼런스를 찾던 중 2019년에 진행된 스프링캠프에서 진행된 좋은 세션을 발견했다. 개인적으로 정말 좋은 강연이라는 생각이 들었다. 강연을 듣으며 테스트에 대한 기준을 정리해보았다. 테스트로 얻을 수 있는 것 테스트 작성으로 우리는 마음의 안정과 자신감을 가질 수 있다. 그렇다면 이 안정감과 자신감을 누구에게 주어야 하는가? 바로 "현재와 미래의 나"와 "현재와 미래의 동료" 이다. 테스트를 작성할 때 나 뿐만 아니라 같이 일하는 동료를 위해 테스트를 짠다는 생각을 갖고 작성하면 더 좋은 테스트를 작성할 수 있다. 무엇을 테스트할 것인가? 만약 우리에게 로또를 구현하라고 과제가 주어진다면 우리는..
· Spring
좋은 단위 테스트 판별법 (FIRST) 이전 포스팅까지 우리는 단위 테스트가 많은 장점을 갖는다는 것을 배웠다. 그렇다면 무조건 적기만 하면 좋은 것일까? 단위 테스트도 하나의 코드이기 때문에 좋은 테스트와 그렇지 못한 테스트로 나눌 수 있다. 개발자들이 보편적으로 "좋은 단위 테스트" 라고 부르는 테스트는 FIRST 규칙을 따른다고 한다. 좋은 코드를 작성하기 위한 지침서 Clean Code 에서 이 FIRST 규칙에 대해 설명하고 있어 해당 내용을 정리해보겠다. Fast Independent Repeatable Self-Validating Timely Fast 좋은 단위 테스트는 실행이 빨라야한다. 단위 테스트는 내부 코드만 테스트할 때와 외부 자원을 다룰 경우의 실행 시간 차이가 크다. 모든 외부 ..
· Spring
Spring 테스트에 대해 공부하다보면 "단위 테스트가 중요하다!"라는 말을 한번쯤은 듣게 된다. 도대체 단위 테스트가 무엇이길래 그렇게 강조를 하는걸까? 단위 테스트(Unit-Test)는요 단위 테스트 : 하나의 기능 또는 메소드 기준, 독립적으로 진행되는 가장 작은 단위의 테스트 하나의 메서드를 위한 테스트 Mock, Stub 같은 방법을 이용 메서드의 경계를 제어할 수 있으므로 테스트하고자 하는 관심 대상에만 집중해 테스트할 수 있음 단위 테스트, 그래서 왜 필요한걸까? 실무에서는 거의 대부분 단위 테스트를 작성한다. 통합 테스트는 여러 컴포넌트를 연결해 테스트하기 때문에 컴포넌트가 많아질수록 테스트 시간이 늘어난다. 이외에 단위 테스트는 통합 테스트와 비교하여 많은 장점을 갖고 있다. 하나씩 알아..
· Spring
Test의 종류 및 개념 테스트는 테스트를 진행하는 범위에 따라 여러가지 종류가 있다. 인수 테스트: 고객이 명세한 요구사항을 충족했는지 검증하는 테스트, 사용자 혹은 고객이 해당 서비스를 인수할것인지 결정하기 위해 수행 부하 테스트: 퍼포먼스 테스트, 시스템 특정 지점의 반응 시간 지연, 실패하는지 테스트 기능 테스트: 공개된 API의 가장 바깥쪽에서 코드 검증 (Controller 호출, Security, http) 통합 테스트: 여러 작업 단위가 연계된 워크 플로우 테스트 (객체 간, 서비스 간, 시스템 간) 단위 테스트: 하나의 기능 또는 메소드를 기준, 독립적으로 수행하는 가장 작은 단위의 테스트 Reference [Unit-Test] 하고 계신가요? 개발자 단위 테스트
· Spring
AssertJ는 무엇인가? AssertJ assertion을 제공하는 자바 라이브러리 테스트 코드, 에러 메세지의 가독성을 높여줌 JUnit5에서도 AssertJ와 비슷하게 값 검증을 할 수 있는 Assertions의 assert메소드들을 제공한다. 그럼 이 둘 간 차이점이 무엇인지 아래 코드를 먼저 보자. assertEquals(expected, actual); assertThat(actual).isEqualTo(expected); 코드를 보면 알 수 있듯 AssertJ에서 제공하는 assertion의 가독성이 더 높다. AssertJ의 장점을 좀 더 구체적으로 알아보면 다음과 같다. 1. 테스트를 할 때 필요한 거의 모든 메소드를 제공 2. 메소드 체이닝을 지원해서 더 짧고 간결하게 코드 작성 가능 ..
· Spring
JUnit JUnit: 자바 개발자가 가장 많이 사용하는 Testing 기반 프레임워크 JUnit5: JAVA8 이상부터 지원 테스트 작성자를 위한 API, 테스트 실행을 위한 API가 분리되어 있음 이전 버전인 JUnit4와 비교해서 JUnit5는 3가지 모듈로 구성되어 있음 JUnit Platform JVM에서 테스트 프레임워크를 실행하는데 기초를 제공 TestEngine API를 제공해 테스트 프레임워크 개발 가능 JUnit Jupiter TestEngine API 구현체 (JUnit5에서 제공) JUnit5에서 테스트를 작성하고 확장하기 위한 새로운 프로그래밍 모델과 확장 모델의 조합 테스트 코드 작성 모듈: junit-jupiter-api 테스트 실행 모듈: junit-jupiter engine..
· Spring
QMember m = new QMember("m"); QClass를 사용할 때 앞선 코드에서는 위 코드처럼 사용했다. QMember로 들어가보면 아래와 같이 QMember에 static 메소드가 있다. 이것을 이용해 좀 더 편리하게 QMember 인스턴스를 만들 수 있다. QMember member = QMember.member; 여기서 QMember.member를 static으로 선언해 아래처럼 더 줄일 수 있다. QMember의 static메소드를 다시 보자. public static final QMember member = new QMember("member1)" member1으로 이름이 설정되어 있기 때문에 쿼리가 member1을 기준으로 아래와 같이 나간다. select member1 from ..
· Spring
엔티티 생성 QueryDsl을 실제 사용하기에 앞서 쿼리에서 사용할 엔티티를 두 개 만들었다. 엔티티 테스트 그 후 연관관계나 세팅 등이 잘 됐는지 간단한 테스트를 실행해본다. in-memory DB 세팅 참고로 DB에 들어간 데이터를 직접 보기 위해 application.yml에 h2로 in-memory DB를 설정해주었다. datasource: url: jdbc:h2:mem:test username: sa password: driver-class-name: org.h2.Driver h2: console: enabled: true path: /h2-console 위와 같이 설정하면 localhost:8080/h2-console로 접속해 DB를 직접 볼 수 있다. 다음부터는 이 엔티티를 가지고 query..
· Spring
우리는 Spring Data Jpa를 이용해 여러 방법으로 쉽게 쿼리를 만들고 작동시킬 수 있었다. 쿼리가 복잡해질 경우 @Query와 같은 어노테이션으로 쿼리를 직접 작성할 수 있다. 하지만 이렇게 되면 쿼리에 문제가 있는지 여부를 런타임시에 알 수밖에 없다. 이런 문제를 극복하기 위해 쿼리를 코드로 작성하는 QueryDsl을 이용할 수 있다. QueryDsl은 spring data jpa와 달리 코드로 쿼리를 짜기 때문에 컴파일 시점에 쿼리에 문제가 있는지 여부를 알 수 있다. Querydsl 설정 querydsl은 스프링 스타터에서 추가할 수 없기 때문에 별도로 build.gradle에 관련 라이브러리를 넣어주어야 한다. plugins { ... // querydsl id 'com.ewerk.gra..
dongb
'Spring' 카테고리의 글 목록