TIL

TIL_20230621

번잔중 2023. 6. 21. 23:40

오늘 할 일

  • 프로그래머스 문제 풀기
  • 테스트 코드 관련 학습
  • 기술 면접 질문 공부하기

오늘 배운 것

프로그래머스 문제 풀기

테스트 코드 관련 학습

개발한 기능을 실행해서 테스트 할 때

  1. 자바의 main 메서드를 통해서 실행하거나,
  2. 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다.

이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한 번에 실행하기 어렵다는 단점이 있다.

→ 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.

  • 테스트용 패키지는 보통 실제 기능이 동작하는 패키지의 이름과 똑같이 만든다.
  1. src/test/java 하위 폴더에 repository 패키지를 생성한다.
    • 테스트할 클래스의 이름 뒤에 Test를 붙여서 ~Test.java 형태로 만드는 것이 관례이다.
    • public으로 하지 않아도 됨 → 다른데서 호출하지 않으니까!
  2. @Test 어노테이션을 사용하면 기능을 실행할 수 있다.
  3. save() 결과 확인하기
    1. System.out.println("result = " + (result == member)); 으로 출력문을 통해 확인할 수 있지만 해당 방법은 비효율적이다.
    2. Assertions.assertEquals(expected, actual); 을 사용하면 결과를 확인할 수 있다. expected에 기대값을 넣고 actual과 비교하는 것이다. org.junit.jupiter.api.Test; 를 import 해서 사용한다.
    3. Assertions.assertThat(member).isEqualTo(result); 으로 사용하는 것이 문장 읽듯 읽혀서 이해가 빠르다. org.assertj.core.api.Assertions; 를 import해서 사용한다. Assertions 부분에 option + enter를 입력해서 static import를 사용하면 `assertThat(member).isEqualTo(result);` 형태로 사용이 가능하다.
  4. findByName() 결과 확인하기
  5. ⭐ Test Case는 순서와 상관없이 정상 동작하도록, 의존관계 없이 설계해야 한다. 즉 테스트가 하나 끝나면 데이터를 클리어할 수 있도록 해주어야 한다. → 하나의 테스트가 끝날 때마다 저장소나 공용 데이터를 깔끔하게 지워주어야 한다.
    1. @AfterEach 어노테이션을 붙여줘서 각 메소드 동작이 끝난 이후에 처리를 해줄 수 있다.
    2. MemoryMemberRepository 클래스에 clearStore()라는 메소드를 만들어 repository를 비워줄 수 있다.
      → Test Case의 장점은 클래스 레벨, 전체 클래스 레벨 단위로 테스트가 가능하다는 것이다.
  • 테스트에서는 한글로 이름을 바꿔줘도 된다.
  • given / when / then 문법
    • 무언가 주어지고(given) ~를 실행했을 때(when), ~것이 실행되어야 한다.(then)
  • new로 다른 객체의 인스턴스가 생성되는 것은 지양하고 같은 인스턴스로 테스트 해야 한다.
    • memberService에서 사용하는 MemoryMemberRepository와 TestCase에서 만든 MemoryMemberRepository는 다른 인스턴스이다. static이 아닌 경우에는 DB가 다르게 인식될 것이다. → 테스트시 완벽하게 같은 환경에서 실행해야 한다.
    • 해결방법: memberService에 생성자를 사용하여 외부에서 MemberRepository를 주입해준다. → DI(Dependency Injection)

기술 면접 질문 공부하기

느낀점

  • 운영체제를 학교 다닐 때 더 열심히 할걸 하는 생각이 듭니다. 교수님의 수업 스타일이 안맞는 것과는 별개로 열심히 했어야 하는거더라구요 ㅎㅎ.. 그래도 정보처리기사 공부하면서 했던 내용이 생각나서 이해는 나름 잘 되고 있습니다.

내일 할 일

  • 프로그래머스 문제 풀기
  • 프로젝트 github 세팅하기
  • 운동하기 - 웨이트 트레이닝

'TIL' 카테고리의 다른 글

TIL_20230623  (0) 2023.06.23
TIL_20230622  (0) 2023.06.22
TIL_20230620  (0) 2023.06.20
TIL_20230619  (0) 2023.06.19
TIL_20230618  (2) 2023.06.18