1. 기존의 switch 문 switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); break; case THURSDAY: case SATURDAY: System.out.println(8); break; case WEDNESDAY: System.out.println(9); break; } 2. 개선된 swtich 문 switch (day) { case MONDAY, FRIDAY, SUNDAY-> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY..
1. isSameAs() 와 isEqualTo() 와 isInstatnceOf() 비교 1) isSameAs() -> == isSameAs() 는 주소값을 비교하는 메서드다. String a = "apple"; String b = a; // 주소값이 같은지 검증 assertions.assertThat(a).isSameAs(b); 2) isEqualTo() -> equals() 메서드 isEqualTo() 는 대상의 내용 자체를 비교하는 메서드다. String a = "apple"; String b = "apple"; // 1. 내용이 같은지 검증 -> 성공 assertions.assertThat(a).isEqualTo(b); // 2. 주소값이 같은지 검증 -> 실패 assertions.assertTha..
1. 성공 테스트 테스트할 코드가 성공해야하는 경우, 제대로 로직이 실행되는지 확인하기 위해서 Assertions.assertThat() 을 활용한다. 1) assertThat(actual).isEqualTo(expected): 실제값(actual)이 기대값(expected)와 같은 값인지 검증 2) assertThat(actual).isInstatceOf(expected): 실제값(actual)이 기대값(expected)와 같은 객체 타입인지 검증 2. 실패 테스트 테스트할 코드가 실패해야 경우, 예외가 제대로 발생하는지 확인하기 위해서 Assertions.assertThrows() 을 활용한다. 1) assertThrows(예외 타입, 람다식): 오른쪽 람다식을 수행했을 때, 해당 예외 타입의 예외가..
1. 예외 발생 메서드(검증 대상) public class DoSomething { public static void func() { throw new RuntimeException("some exception message..."); } } RuntimeException이 발생하는 메서드를 만들었다. 우리가 검증해야할 검증 대상이다. 2. 예외 테스트 코드 작성하기 위에서 작성한 "예외 발생 메서드가 예외를 잘 발생하는지"를 테스하는 코드를 4가지 방법으로 작성해볼 수 있다. 방법1. assertThrows: 예외 타입이 같은지 검사 import static org.junit.jupiter.api.Assertions.assertThrows; @Test public void junit5에서_excepti..
1. @Test @Test 어노테이션을 붙이면 테스트해야 할 Test메서드다. JUnit5 기준으로 접근제한자가 Default 여도 된다. 2. @BeforeAll @beforeAll 어노테이션을 붙이면 해당 테스트 클래스를 초기화 할 때 1번만 수행되는 메서드다. static으로 선언해야 한다. @BeforeAll static void beforeAll() { System.out.println("@BeforeAll"); } 3. @BeforeEach @beforeEach 어노테이션을 붙이면 각 테스트 메서드 실행 이전에 수행되는 메서드다. @BeforeEach void beforeEach() { System.out.println("@BeforeEach"); } 4. @AfterAll @AfterAll ..
기본적으로 이 단계를 만족하도록 테스트를 작성할 수 있다. 간혹 그렇지 않은 경우도 있지만 초심자라면 더더욱 이것을 따르는 것이 좋다!! 1. given: 어떤 상황이 주어졌을 때(이 데이터 기반으로 함) 2. when: ~를 실행했을 때(검증할 것을 실행) 3. then: 검증한 결과가 ~가 나와야함 1,2 는 실행 단계, 3은 검증 단계라고 할 수 있다. 실행 단계에선는 사용자 입력을 모방해 테스트할 로직을 실행시키고 검증 단계에서는 실행 단계가 예상된 대로 동작하는지 검증한다. 1. AssertJ란? AssertJ는 많은 assertion을 제공하는 자바 라이브러리이다. 에러 메세지와 테스트 코드의 가독성을 매우 높여주고 각자 좋아하는 IDE에서 쓰기 굉장히 쉽다. 1) AssertJ 메서드 imp..
1. null과 관련된 문제 null과 관련된 문제들을 크게 2가지로 요약해보면 1) 런타임에 NPE(NullPointerException)라는 예외를 발생시킬 수 있다. 2) NPE 방어를 위해서 들어간 null 체크 로직 때문에 코드 가독성과 유지 보수성이 떨어진다. 이렇게 null과 관련된 문제들로 인하여 Optional이 등장하게 되었다. 2. Optional 이란? Java8에서 Optional는 null이 올 수 있는 객체를 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional을 최대 1개의 원소를 가지고 있는 특별한 Stream이라고 생각하면 편하다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바로 ..
1. Stream 이란? Java8부터 지원하는 Stream은 컬렉션, 배열 등에 저장되어 있는 요소들을 하나씩 참조하며 반복적인 처리를 가능하게 하는 기능이다. Stream을 사용한다면 불필요한 for문과 if문 등의 분기처리를 쓰지 않고 깔끔하고 직관적인 코드로 변형할 수 있다. 2. Stream 특징 1) Stream은 원본 데이터를 변경하지 않는다. - 원본 데이터로부터 데이터를 읽기만 할 뿐, 변경은 하지 않는다. 2) Stream은 일회용이다. - 한 번 사용하면 닫혀서 재사용이 불가능하다. 필요시 정렬된 결과를 컬렉션이나 배열에 담아 반환할 수 있다. 3) Stream은 작업을 내부 반복으로 처리한다. - 내부 반복을 통해 간결한 코드를 작성할 수 있다. (내부반복이란 반복문을 메서드 내부에..