java 84

Model Mapper 사용법

maven repository 에서 model mapper 라이브러리 의존성을 추가 해줌 MainController에서 Bean으로 등록해줘야 사용할 수 있다. @SpringBootApplication public class HaedalApplication { public static void main(String[] args) { SpringApplication.run(HaedalApplication.class, args); } @Bean public ModelMapper modelMapper(){ return new ModelMapper(); } } ModelMapper는 Entity → Dto 로 변환할때 사용 되는데 그때 데이터를 변환하려면 Set 기능이 필요하기 때문에 Dto 에 @Setter ..

JAVA 2023.01.26

동작 파라미터화 코드 전달하기(2)

ApplePredicate 인터페이스를 구현하는 여러 클래스를 인스턴스화 하는 과정이 좀 복잡할 수 있다. → 익명 클래스를 사용해 보자 익명 클래스란? 자바의 지역 클래스( 블록 내부에 선언된 이름이 없는 클래스 이다.) 익명클래스를 만들면 클래스 선언와 인스턴스화 동시 진행 가능! 다섯번째시도 : 익명 클래스를 사용해보자 List redApples = filterApples(inventory, new ApplePredicate(){ public boolean test(Apple apple){ return RED.equals(apple.getColor()); } }) 위의 예제를 보면 클래스를 새로 만들지 않고 익명의 클래스를 만들어서 작성하였다. 그치만 익명의 클래스도 자리를 많이 차지하기 때문에 좀..

JAVA 2023.01.19

동작 파라미터화 코드 전달하기(1)

앞으로 모던 자바 인 액션 책을 읽고 기억해야 할 내용이나 새로 알게 된 내용을 정리해보려 한다. 아래는 2장 동작 파라미터화 코드 전달하기의 일부 내용이다. 우리가 어떤 상황에서 일을 하던 소비자의 요구사항은 항상 바뀐다. 시시각각 변하는 사용자 요구사항에 어떻게 대응해야 할까? → 동작 파라미터화를 이용하자! 동작 파라미터화란? : 아직은 어떻게 실행할 것인지 결정하지 않은 코드블록을 의미한다. 첫번째 시도 : 기존의 농장 재고목록 애플리케이션에 리스트에서 녹색 사과만 필터링 하는 기능을 추가해 보자! public static List filterGreenApples(List inventory){ List result = new ArrayList(); for (Apple apple : inventor..

JAVA 2023.01.10

int 와 long

코딩 테스트를 하다보면 코드 문법상에는 문제가 없어 보이지만 error 가 나는 경우가 있다. 아래 코드가 그와 같은 경우이다. 숫자로 이루어진 문자열 t와 p 가 주어질 때 … 프로그래머스의 크기가 작은 부분 문자열 문제를 참고하시길 바람 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열, 0으로 시작 안함 처음엔 문제를 읽고 전부 int 타입으로 코딩을 해서 제출 했다. → 몇몇 테스트에서 RuntimeError 발생! 이유를 찾는데 한참이 걸렸다… 제한사항의 1번에 p가 1~18까지가 아닌 p의 길이가 18까지 였다. int 는 최대 10자리 까지만 사용이 가능하다.. 따라서 p를 파싱하는 변수는 모두 long 으로 갔어야 한다...

JAVA 2022.12.27

BDD 스타일 Mockito API

BDD는 잘짠 TDD 와 같다. BDD는 말 그대로 행동 주도 개발이다. → 사용자의 행위까지 생각하고 테스트하며 개발한다. 테스크는 Given-When-Then 이라는 양식에 맞춰서 사용한다. 아래는 테스트 코드는 BDD 방식으로 변경한 예시이다. /* Given */ when(memberService.findById(1L)).thenReturn(Optional.of(member)); when(studyRepository.save(study)).thenReturn(study); // when 을 BDD 스타일로 변경하면 given을 사용 given(memberService.findById(1L)).willReturn(Optional.of(member)); given(studyRepository.save..

JAVA 2022.12.26

Mock 객체 확인

verify(검증) 메소드를 이용하여 특정 메소드가 실행이 됐는지, 몇번 실행됐는지, 실행이 안됐는지 등 검증을 해볼 수 있다. verify 예제 @Test public void pratice(){ StudyService studyService = new StudyService(memberService, studyRepository); assertNotNull(studyService); Study study = new Study(10, "test"); Member member = new Member(); member.setId(1L); member.setEmail("eunjia190@gmail.com"); when(memberService.findById(1L)).thenReturn(Optional.of..

JAVA 2022.12.15

Mock 객체 stubbing

모든 Mock 객체의 행동 Null 을 리턴한다.( Optional 의 경우에는 Optional.empty 리턴 ) Primitive 타입은 기본 Primitive 값 콜렉션은 비어있는 콜렉션 void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다. stubbing 예제 : when 을 사용하여 findById에 1을 호출하면 member 값을 return 받게 작성해보았다 @Test void createStudyService(){ StudyService studyService = new StudyService(memberService, studyRepository); assertNotNull(studyService); Member member = new Member(); member.setI..

JAVA 2022.12.15

Mockito

mockito 는 mockito-core 와 mockito-junit-jupiter 두가지 의존성을 추가해줘야하는데 애초에 spring boot 프로젝트로 생성을 하면 자동으로 주입되어 있다. 직접 추가하려면 maven repository에서 추가! mockito는 쉽게 말해서 가짜 객체를 만들어 준다고 생각하자! 현재 MemberService는 interface 만 있고 구현되어있진 않다. 이럴때 test code 작성시 MemberService 에 가상의 Mock 인스턴스를 직접 만들어서 사용해야한다. @ExtendWith(MockitoExtension.class) // 이 어노테이션이 있어야 제대로 Mock이 동작한다. class StudyServiceTest { @Mock MemberService..

JAVA 2022.12.14

JUnit5 Assertions

1. assertAll 만약 assertAll을 안쓰면 assertEquals이 실패하면 assertTrue는 실패인지 성공인지 모른다. 따라서 한번에 테스트 결과를 확인하고 싶으면 assertAll로 묶자! → 보통은 여러개 테스트중 하나만 실패해도 다음 테스트를 진행할수 없지만 assertAll은 실패해도 다음 테스트를 진행 할 수 있다.(에러를 한번에 볼수가 있다.) @Test @DisplayName("스터디 만들기") void create_new_study() throws Exception { Study study = new Study(-10); assertAll( () ->assertNotNull(study), () ->assertEquals(StudyStatus.DRAFT, study.getS..

JAVA 2022.12.14