1. Testing

  1. [SoftWare Development Testing]
    1. [종류]
      1. 시스템 테스트
        1. 통합되어 구축된 시스템을 테스트 하는 단계를 말합니다
      2. 통합 테스트
        1. 서로 다른 모듈이 상호작용 하는 것을 테스트 하는 단계를 말합니다
        2. [기능]
          1. Controller, Service, Repository의 개별 메소드를 이용합니다
      3. 단위 테스트
        1. 개별 코드 단위(주로 메소드)를 테스트 하는 단계를 말합니다
        2. [기능]
          1. Controller 부터 Repository 까지 이어진 기능을 말합니다
    2. [장점]
      1. 잘못된 방향의 개발을 막습니다 (이전에 작동하던 기능이 작동하지 않는 상황 등)
      2. 전체적인 코드의 품질이 상승됩니다
      3. 최종적으로는 오류 상황에 대한 대처가 좋아져서 전체적인 개발 시간이 줄어들기 시작합니다
    3. [단점]
      1. 결국엔 코드를 작성하는 것이고, 개발 시간이 늘어납니다
      2. 테스트 코드도 유지보수가 필요해서 유지보수 비용도 늘어납니다
      3. 테스트 작성법을 따로 배워야 합니다
  2. [Spring Boot Test Tools]
    1. JUnit
      1. 사실상의(de-facto) Java 어플리케이션 Testing표준 라이브러리 입니다
    2. SpringTest
      1. Spring 어플리케이션 Test지원 라이브러리 입니다
    3. AssertJ
      1. 가독성 높은 Test작성을 위한 라이브러리 입니다
    4. Hamcrest
      1. Test진행시 제약사항 설정을 위한 라이브러리 입니다
    5. Mockito
      1. Test용 Mock라이브러리 입니다
    6. JSONassert
      1. JSON용 Assertion 라이브러리 입니다
    7. JsonPath
      1. JSON데이터 확인용 라이브러리 입니다
  3. [H2]
    1. 초기 단계의 개발 및 테스트에서 많이 활용하는, 메모리에서 동작하는 관계형 데이터베이스라고 합니다
  4. [Annotation]
    1. @Test
      1. 테스트를 수행하는 메소드라는 의미입니다
    2. @Mock
      1. 주입할 Service 객체를 Mock인스턴스로 선언한다는 의미입니다
    3. @InjectMocks
      1. Mockito의 어노테이션으로 특정 객체의 필드에 @Mock, @Spy 어노테이션이 지정된 객체를 주입할 수 있습니다
    4. @BeforeEach
      1. 각 Test 메서드가 실행되기 전에 실행되는 메서드를 표시하는 어노테이션 입니다
  5. [Interface]
    1. MockMvc
      1. 개발한 웹 프로그램을 실제 서버에 배포하지 않고도 Test를위한 요청을 제공하는 것을 말합니다
  6. [Class]
    1. MockMvcBuilders
      1. SpringMVC Test에서 사용되는 빌더 클래스를 말합니다
      2. MockMvc 객체를 쉽게 생성하여 Test하는데 사용하기 위함을 명시하는 것입니다