TDD 5

springboot - embedded mode H2 test 방법

1. test - 임베디드 모드 db 사용 이유 test case를 실행하려고 별도의 db를 설치하고, 운영하는 것이 비효율적 단순 검증 용도로 사용하므로 test 종료시 db의 data를 모두 삭제해도 된다. 더해서 test 종료시, db 자체를 날려도 된다. 임베디드 모드 H2 db는 java로 개발 되어있고 JVM 안에서 memory 모드로 동작한느 특별한 기능 제공 app 실행할 때 H2 데이터베이스도 해당 JVM 메모리에 포함해서 함께 실행 하 수 있다. db를 app에 내장해서 함께 실행한다고 Embedded mode라고 한다. app 종료시, embedded mode로 동장하는 H2 db도 함께 종료되고 data도 모두 사라진다. = java libarary처럼 동작한다. 수동, 자동 공통 ..

TDD/JUnit5 2023.09.25

@Test - @Transactional 적용

1. test - data rollback spring db 1 에서 학습한 transactionManger과 status를 이용하여 status가 true, false 상관 없이 무조건 rollback하도록 @BeforeEach @AfterEach 사용 @BeforeEach 수행 부터 @AfterEach 오기전까지 동일 connection을 사용하는 transaction 수행됨 package hello.itemservice.domain; @SpringBootTest class ItemRepositoryTest { // DataSource와 txManger는 springboot에서 자동으로 생성해놓았다. @Autowired ItemRepository itemRepository; //tx 관련 code @..

TDD/JUnit5 2023.09.25

@test용 db 분리

1. 테스트 - 데이터베이스 연동 데이터 접근 기술은 실제 데이터베이스에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 과정이 필요 test case는 src/test에 있기 때문에, test 실행시 src/test 내부 application.properties 파일이 우선순위를 가지고 실행 해당 설정 파일에도 spring.datasource.url 같은 db 연결 설정 필요 만약 main의 application.properties의 설정을 그대로 사용하고 싶으면 test/resources 패키지에 application.properties 파일 자체가 존재하지 않아야 사용 가능 1.1. h2 db datasource 설정 등록 test/resources/application.properties..

TDD/JUnit5 2023.09.25

SpringBoot test - @SpringBootTest, @TestConfiguration

1. test 목적 @transactional test를 할 때, spring container를 이용한 proxy 객체 생성을 해야해서 일반 java 단위 test로 검사가 불가하다. 때문에 test code 내부에 bean 등록과 spring container 환경, DI 를 이용해서 test 수행 package hello.jdbc.service; import static hello.jdbc.connection.ConnectionConst.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @Slf4j @SpringBootTes..

TDD/JUnit5 2023.09.23

JUnit5 - test class, test method 명 변경

1. test code 작성시 유의점 test code는 프로젝트가 커짐에 따라 같이 커지게 된다. 그래서 아래의 규칙을 통해서 체계적으로 관리해야한다. 경우의 수 하나당 @Test method를 생성하기 - 오류발생시 어떤 method인지 파악이 쉽다. @Test method를 생성할 때 공통된 부분끼리 묶어서 생성하기 @Test method 명을 더 자세히 작성하기  2. @DisplayNameGeneration, @DisplayName() 위의 규칙으로 부족하다고 느껴서 한눈에 알아보고 싶을 때 사용하는 이름 지정 어노테이션들 @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) // test한 class와 method명에 자..

TDD/JUnit5 2023.03.15