-
[JUnit] JUnit4에서 JUnit5로 마이그레이션DEV/JUnit 2024. 6. 30. 01:38
왜 JUnit4에서 JUnit5로 전환해야하며, JUnit5가 등장한 이유가 무엇일까?JUnit in action에서 자세히 다루고 있어 가볍게 정리하고 넘어가고자한다.JUnit4 아키텍처, JUnit5 아키텍처 비교JUnit4는 단순한 모놀리식 아키텍처를 가지고 있다.JUnit4의 모든 기능은 jar파일(junit.jar) 한개 안에 들어 있다.이는 개발자가 JUnit4를 사용하고자한다면 클래스패스에 단일 jar만 추가하면 된다는 뜻이다. 단일 jar파일로도 동작이 가능하지만, JUnit4의 기능을 조금 더 확장해서 사용하는 것이 일반적이다.JUnit4 runner, rule을 활용하여 테스트를 확장 할 수 있으나 runner의 리플렉션 사용은 캡슐화를 저해한다.이는 JUnit5가 만들어진 이유 중 하..
-
[JUnit] JUnit 핵심 (3) 의존성 주입 / 반복 테스트 / 파라미터 테스트 / 동적 테스트 / Hamcrest vs AssertJDEV/JUnit 2024. 6. 26. 03:00
JUnit5 이전에는 생성자나 메서드에 파라미터가 있는 것을 허용하지 않았고 테스트는 반드시 기본 생성자만 사용해야했다.JUnit5부터는 이러한 부분이 의존성 주입으로 사용 가능하게 되었다. ParameterResolver 인터페이스는 런타임에 파라미터를 동적으로 리졸브한다.현재 JUnit5에는 3개의 리졸버가 기본으로 내장되어있다.다른 파라미터 리졸버를 사용하려면 @ExtendWith로 적절한 extension을 적용하여 파라미터 리졸버를 명시해야한다. - TestInfoParameterResolver: 현재 실행중인 테스트나 컨테이너에 관한 정보를 제공하기 위해 사용되는 TestInfo 객체를 파라미터로 사용 가능디스플레이 네임, 테스트 클래스, 테스트 메서드, 관련 태그 정보 등import org...
-
[JUnit] JUnit 핵심 (2) 중첩 테스트 / 태그 테스트 / 단언문 / 가정문DEV/JUnit 2024. 6. 20. 21:59
- 중첩 테스트 : @Nested 애노테이션을 사용하여 내부 클래스와 외부 클래스 중첩 테스트개발자가 비즈니스 로직을 잘 따르게 하고, 분명한 테스트 코드를 작성하도록 유도하여 개발자가 테스트 프로세스에 자연스럽게 적응하도록 만든다.결합도 관점에서 개발자가 테스트 그룹 간의 관계를 표현하는 데에도 도움이 된다.package com.study.junit.ch02;import static org.junit.jupiter.api.Assertions.*;import org.junit.jupiter.api.Nested;import org.junit.jupiter.api.Test;import java.text.ParseException;import java.time.LocalDate;import java.time...
-
[JUnit] JUnit 핵심 (1) 생애주기와 동작원리 / 테스트 클래스와 메서드 / 애노테이션DEV/JUnit 2024. 6. 20. 15:26
TDD 하고싶어서 학습하는 JUnit 프레임워크, 책을 기반으로 학습하고 정리하고자한다. 참고 도서https://www.yes24.com/Product/Goods/126579542 JUnit IN ACTION 3판 - 예스24자바 단위 테스트를 위해 알아야 할 모든 것JUnit은 자바 애플리케이션을 단위 테스트하기 위한 사실상의 표준이다. 자바 개발자에게 JUnit은 이제 필수가 되었다. 특히 JUnit 5에서는 모던 자바(자www.yes24.com 해당 책에서는 JUnit5를 주로 다루고 JUnit4와 비교하는 부분이 있을 것으로 보인다. 샘플 코드https://github.com/devkunst/junit-in-action-third-edition-kr GitHub - devkunst/junit-in..
-
[Git] git 커밋 메시지 규칙DEV/ETC 2024. 6. 12. 00:26
Git 커밋 메시지를 작성할 때는 일관된 규칙을 따르는 것이 중요하다.이는 프로젝트의 유지보수성과 협업의 효율성을 높이는 데 도움이 되며, 나 또한 쉽게 찾아볼수있도록 정리하고자한다. 다음은 일반적으로 많이 사용되는 Git 커밋 메시지 규칙이다.1. 커밋 메시지 구조: 2. 커밋 메시지 타입타입은 커밋의 목적을 명확하게 나타내며, 다음과 같은 타입이 자주 사용된다.feat: 새로운 기능 추가fix: 버그 수정docs: 문서 변경style: 코드 포맷팅, 세미콜론 누락 등 코드 변경이 없는 경우refactor: 코드 리팩토링 (기능 변경 없음)test: 누락된 테스트 추가 또는 기존 테스트 수정chore: 빌드 프로세스 또는 보조 도구 수정 (라이브러리 추가 등)perf: 성능 향상 관련 변경build:..
-
[JAVA] Java Record 란?DEV/JAVA 2024. 6. 5. 01:41
Record란?변경이 불가한 데이터 객체를 쉽게 만들 수 있도록 해준다. 클래스보다 간결하고 효율적으로 데이터 객체를 생성할 수 있도록 설계되었다. Java14에서 preview로 나왔고 Java16에서 정식기능으로 포함되었다. 목표데이터를 간결하게 표현하기 위한 방법 제공개발자가 불변 데이터를 모델링하는데 집중하도록 함데이터 지향 메서드를 자동으로 구현특징간결성 : 필드를 정의하면 해당 필드를 기반으로 자동으로 메서드가 생성되어 코드의 양을 줄일 수 있고, 불필요한 보일러플레이트 코드를 줄여 가독성을 높여준다.메서드 자동 생성 : 필드를 기반으로 equals(), hashCode(), toString() 메서드를 자동으로 생성한다.생성자 자동 생성 : 필드를 기반으로 자동으로 생성자를 생성한다. (기본..
-
[Architecture] 헥사고날 아키텍처(Hexagonal Architecture) (ft. 계층형 아키텍처, 클린 아키텍처, DDD)DEV/ETC 2024. 6. 5. 00:12
헥사고날 아키텍처를 설명하기전에 계층형 아키텍처와 클린 아키텍처, 그리고 도메인 주도 설계(DDD)관련하여 가볍게 짚고 넘어가야한다. 헥사고날 아키텍처는 전통 방식인 계층형 아키텍처의 단점을 보완하기위해 설계되었다. 계층형 아키텍처의 문제점1) 데이터베이스, 영속성에 대한 의존성도메인 계층이 데이터베이스에 의존하게 되어 데이터베이스에 변화가 일어나면 도메인 계층에도 변화가 생긴다.서비스 계층에서도 영속성 모델을 도메인 모델처럼 사용하게 된다. 그렇다면 즉시로딩, 지연로딩, 트랜잭션, 플러시 등을 고려해야하고 영속성에 대한 의존이 프로젝트 전체적으로 퍼지게 되어 변경에 취약해진다. 2) 아키텍처 경계를 강제할 수 없다.계층형 아키텍처에서는 상위 계층에 있는 컴포넌트에 접근할 목적으로 해당 컴포넌트를 하위 ..
-
[JPA] 값 타입 (엔티티 타입과 비교 / 기본값타입 / 임베디드타입 / 컬렉션 값타입)DEV/JPA 2024. 6. 1. 18:35
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한JPA 데이터 타입엔티티 타입- @Entity로 정의한 객체- 데이터가 변해도 식별자로 추적 가능ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입- int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체- 식별자가 없고 값만 있어 값 변경시 추적 불가ex) 숫자 100을 200으로 변경하면 다른값으로 대체됨 1. 기본값 타입: 생명주기를 엔티티에 의존하며 값 타입은 공유하여 사용할 수 없음- 자바 기본 타입 (int, double)- 래퍼 클래스 (Integer, Long)- String 2. 임베디드 타입 (복합 값 타입): 새로운 값 타입을 직접 정의할 ..