토이 프로젝트 스터디 #10

appti·2022년 6월 18일
0

토이 프로젝트 스터디 #10

  • 스터디 진행 날짜 : 6/18
  • 스터디 작업 날짜 : 6/16 ~ 6/18

토이 프로젝트 진행 사항

  • 테스트 코드 작성
    • Auth
    • Account
    • TestContainers 적용

내용

테스트 코드 작성

  • 현재 작성한 코드에 대한 테스트 코드 작성 완료

TestContainers 적용

@SpringBootTest
@Testcontainers
@ActiveProfiles("test")
class BoardApplicationTests {

	@Container
	static PostgreSQLContainer postgreSQLContainer =
			new PostgreSQLContainer("postgres")
					.withDatabaseName("board_test");

	@Test
	void contextLoads() {
	}

}
  • 테스트용으로 별도의 인메모리 DB를 사용하지 않고 Docker를 통해 직접 사용하고 있는 postgreSQL을 테스트 용도로 사용
# console log
[main] DEBUG 🐳 [testcontainers/ryuk:0.3.3] - Starting container: testcontainers/ryuk:0.3.3
[main] DEBUG 🐳 [testcontainers/ryuk:0.3.3] - Trying to start container: testcontainers/ryuk:0.3.3 (attempt 1/1)
[main] DEBUG 🐳 [testcontainers/ryuk:0.3.3] - Starting container: testcontainers/ryuk:0.3.3
[main] INFO 🐳 [testcontainers/ryuk:0.3.3] - Creating container for image: testcontainers/ryuk:0.3.3

# docker images
REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
testcontainers/ryuk     0.3.3     146fb8d54138   8 months ago     11.5MB
  • 테스트 실행 시 docker에서 testcontainers가 실행되는 것을 확인할 수 있음
@Transactional
@SpringBootTest
@Testcontainers
@ActiveProfiles("test")
@DisplayName("AccountRepository 테스트")
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class AccountRepositoryTest {

    @Autowired
    AccountRepository accountRepository;

    @Test
    void save_테스트() {
        // given
        Account account = AccountEntityFactory.createAccount("test@email.com", "nickname", "password");

        // when
        Account saveAccount = accountRepository.save(account);

        // then
        assertEquals(account.getEmail(), saveAccount.getEmail());
    }

    @Test
    void existsByNickname_테스트() {
        // given
        Account account = AccountEntityFactory.createAccount("test@email.com", "nickname", "password");
        accountRepository.save(account);

        // when
        boolean result = accountRepository.existsByNickname("nickname");

        // then
        assertTrue(result);
    }

    @Test
    void existsByEmail_테스트() {
        // given
        Account account = AccountEntityFactory.createAccount("test@email.com", "nickname", "password");
        accountRepository.save(account);

        // when
        boolean result = accountRepository.existsByEmail("test@email.com");

        // then
        assertTrue(result);
    }
}
  • 이를 통해 환경에 구애받지 않고 실제 사용하고 있는 DB를 통해 테스트 할 수 있는 Repository 관련 테스트 코드 작성 가능
profile
안녕하세요

0개의 댓글