코드스테이츠_국비교육/[Section3] 40

56.01_[Spring MVC] 테스팅(Testing)_Mokito_22.11.10

>Mock-Up : 실제를 본따만든 가짜 모형 : 실제를 대신하여 테스트하기 위함 >Mock 객체를 사용하는 이유 -현재 테스트 프로세스 : 테스트에서 시작하지만 결국 Controller, Service, Repository, DB까지 모두 거쳐서 직접 확인한다. : 슬라이스 테스트라고 보기힘든 상태이다. -Mock 테스트 프로세스 : 슬라이스 테스트를 위해서 각 계층과 연동된 계층을 대신한 가짜를 만든다. : 가짜 계층으로 연결된 것처럼 테스트를 진행하여 해당 계층만 테스트할 수 있는 진정한 의미의 슬라이스 테스트를 진행할 수 있다. >Mockito : Mock-Up 객체를 만드는 것을 Mocking이라고 하고, Mocking을 위한 라이브러리가 Mockito이다. >Mocking 설정 지점 >용어 정..

55.03_[Spring MVC] 테스팅(Testing)_실습 페어 및 궁금증_22.11.09

궁금증 1. @Transactional 이 왜 붙었을까? 무슨 역할을 하지 => 테스트 케이스에 한해서는 테스트 케이스가 작동하고나면 rollback이 일어남. : 현재는 DB가 연동이 안되었을때 GET, DELETE, PATCH 를 할 줄 모른다. 때문에 각각의 HTTP Methods를 테스트하기 위해서는 테스트 전에 미리 DB에 데이터를 넣어주어야한다. 주의할 것은 DB에 데이터를 넣고 테스트를 진행한 후, 마지막에는 DB에서 다시 사용한 데이터를 지워야하는 점이다. 이것을 편하게하기 위해서 @Transactional을 테스트 클래스에 붙이고, 각각의 테스트 케이스가 종료되면 DB가 롤백되게 만든다. 2. MockMvc : 서블릿 컨테이너를 거치지 않음. (톰캣안씀) : 덕분에 빠르게 테스트 가능 3..

55.02_[Spring MVC] 테스팅(Testing)_Hamcrest_22.11.09

>Hamcrest : JUnit 기반의 단위 테스트에 사용할 수 있는 Assertion Framwork >Hamcrest 를 사용하는 이유 : JUnit 자체로 지원하는 메서드도 많지만 Hamcrest 만의 장점이 있음. : 인간의 언어와 가깝게 메서드가 지정되어있기 때문에 가독성이 향상된다. : 테스트 실패 메시지를 이해하기 쉽다. : 다양한 Matcher 가 제공된다. >Hamcrest 가능성 : JUnit 자체 메서드보다 익숙해지기 편해보이고 남이 코드를 봐도 가독성이 좋을 것 같음.

55.01_[Spring MVC] 테스팅(Testing)_슬라이스 테스트 복습_22.11.09

슬라이스 테스트 >슬라이스 테스트의 필요성 1. 단위 테스트는 해당 메서드가 잘 기능하지의 유무를 확인할 뿐이어서 수 많은 상호작용으로 이뤄지는 애플리케이션의 기능 전체를 테스트를 대신할 수 없다. 2. 상호작용의 단위를 나눈 계층 별 테스트가 필요하다. >슬라이스 테스트 : 특정 계층만 잘라서 테스트하는 것 : 보통 API 계층과 데이터 액세스 계층의 테스트를 의미함. : 서비스 계층은 단위 테스트로 나누거나 서비스 계층 테스트 자체를 단위 테스트라고도 함. API 계층 테스트 >API 계층 테스트 클래스 기본 구조 -@SpringBootTest : 테스트를 위한 Application Context 생성 : Spring Boot 기반 애플리케이션을 테스트 할 수 있음. // ?? : Applicatio..

54.03_[Spring MVC] 테스팅(Testing)_슬라이스 테스트_22.11.08

>슬라이스 테스트의 필요성 >슬라이스 테스트 API 계층 테스트 >API 계층 테스트 클래스 기본 구조 -@SpringBootTest : Application Context 생성 : Spring Boot 기반 애플리케이션을 테스트하기 위함 -@AutoConfigureMockMvc : Spring Boot Initializer 처럼 Controller 테스트를 위한 구성을 자동으로 형성 -MockMvc -given -when -then >API 계층 테스트 케이스 용어 정리 -Gson -.perform() -ResultActions -post() -.accept -.contentType -.content -.andExpect() -.status().isCreated() -.value -jsonPath >@..

54.02_[Spring MVC] 테스팅(Testing)_JUnit을 사용한 단위 테스트_22.11.08

>JUnit : Java 기반 애플리케이션 테스트에 사용되는 오픈 소스 테스트 프레임워크 중 베스트 (거의 표준으로 취급) : TestNG, 치고올라오는 경쟁자 >JUnit 기본 설정 -의존성 라이브러리 testImplementation 'org.springframework.boot:spring-boot-starter-test' -Spring Boot Initializer(Gradle) : Gradle 기반으로 Spring Boot Initializer를 이용하면 별다른 설정없이 JUnit 사용가능하게 미리 설정되어 있다. >JUnit 테스트 케이스의 기본 구조 >@Test, @DisplayName("") >JUnit_Assertion methods -assertEquals() -assertNotNull..

54.01_[Spring MVC] 테스팅(Testing)_단위 테스트_22.11.08

>테스트 : 최대한 좋은 결과를 얻기 위해 검증하는 것. : 애플리케이션을 실제 사용하는 제 3자 입장에서 만날 수 있는 에러를 잡기 위한 목적도 있음. >테스트 영역 별 구분 -기능 테스트 : 애플리케이션 전반적인 기능이 잘 작동하는지 테스트 : 주로 QA 부서(혹은 외부 QA업체)나 프론트 분야에서 진행 -통합 테스트 : 백엔드 분야(클라이언트를 제외한)의 기능 테스트 : 백엔드 개발자가 직접 진행 : 백엔드 영역의 전부를 테스트하는 개념 -슬라이스 테스트 : 각 계층(layer)을 쪼개서하는 테스트 : API 계층, 서비스 계층, 데이터 액세스 계층 : 백엔드 영역의 일부를 테스트하는 개념 -단위 테스트 : 메서드 단위의 테스트가 대부분 : 사실 데이터베이스 상태를 변경하지 않는 테스트면 단위 테스..

53.01_[Spring MVC] 트랜잭션(Transaction)_실습 페어_22.11.07

>@EnableAsync, @Async : 비동기 메서드를 쉽게 만드는 용도로 사용되는 애너테이션 : @EnableAsync 은 클래스 레벨에 붙이고, @Async 은 메서드 레벨에 붙인다. : @Async 애너테이션이 붙은 메서드는 비동기적으로 작동한다. >ApplicationEventPublisher : 인터페이스 >1:1, 1:N, N:1 의 속성값 cascade : CascadeType.~~알아두기

52.02_[Spring MVC] 트랜잭션(Transaction)_트랜잭션 처리_22.11.04

Spring FrameWork에서의 트랜젝션 처리 트랜잭션의 구분 -로컬 트랜젝션 -분산 트랜젝션 Spring에서 사용되는 트랜젝션 방식 -선언형 트랜젝션 방식 : 두가지로 나뉜다. 비즈니스 로직에 애너테이션 추가하는 방법과 AOP 방식을 이용한 방법 -프로그래밍 코드 베이스 트랜잭션 방식 : 트랜젝션은 핵심 기능보다는 부가적인 기능에 가깝다. 때문에 코드 베이스로 트랜잭션을 구현하여 적용하는 것은 객체지향적인 관점에서 적절치 않다. Spring Boot에서의 트랜젝션 설정 -Datasource -JpaTransactionManager //Spring boot의 내부 처리 애너테이션을 이용한 트랜젝션 적용(클래스 레벨) -@Transactional 적용 -JPA 로그 레벨 설정 : jpa 로그 레벨 설정..