[Spring Boot] 테스트 코드 중 @After 오류 해결

HAM·2023년 2월 4일
0

Spring Boot Study

목록 보기
2/2
post-thumbnail

현재 Spring Boot 공부는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'로 진행하고 있습니다 💪🏻

IntelliJ IDEA Community Edition 2022.3.2, JAVA 11 사용

책 p.96 - p.97 부분을 열심히 따라하고 있었는데 @After 부분에서 Tab키를 누르면 @After() 이렇게 계속 뜨길래.. 또 에러가 뜨겠구만.. 싶었다..

역시가 사람을 잡네..


너무 단순하게 구글링을 해서 그런지 원하는 정답을 얻기는 쉽지 않았다.
아직 아는 게 많이 없어서 어떤 것이 키워드인지 몰라서 무작정 검색을 하다가 관련 있어 보이는 글을 보고 바로 시도해보았는데 어영부영 성공하기는 했다.

진짜 정답인지 아닌 지 판별할 수 있는 능력은 아직..

해결

@After은 https://deepweller.tistory.com/30 글을 참고하여 채워 보았다.

@After(value = "execution(* com.test.controller.TestController.*(..))")
public void cleanup() {
	postsRepository.deleteAll();
}

최종코드

package com.jojoldu.book.springboot.domain.posts;


import org.aspectj.lang.annotation.After;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
public class PostsRepositoryTest {

    @Autowired
    PostsRepository postsRepository;

    @After(value = "execution(* com.test.controller.TestController.*(..))")
    public void cleanup() {
        postsRepository.deleteAll();
    }

    @Test
    public void 게시글저장_불러오기() {
        //given
        String title = "테스트 게시글";
        String content = "테스트 본문";

        postsRepository.save(Posts.builder().title(title).content(content).author("jojoldu@gmail.com").build());

        //when
        List<Posts> postsList = postsRepository.findAll();

        //then
        Posts posts = postsList.get(0);
        assertThat(posts.getTitle()).isEqualTo(title);
        assertThat(posts.getContent()).isEqualTo(content);
    }
}

저번 글처럼 import 부분은 먼저 하지 않았고 메인 코드를 다 작성하고 import 부분을 확인했다.

import 어쩌고 After 이나 import 어쩌고 Test는 조금 다르게 되어 있는 것 같아 넘겼고 import 어쩌고 RunWith 는 바로 저번 글에 적은 내용을 참고해서 적지 않았다.

저번에도 오류가 생겼다가 해결했는데 기록해두지 않아서 까먹었는데

나처럼 메인 코드를 먼저 적고 오류를 찾으면 assert 부분에서 빨간색이 뜨는데

//then
        Posts posts = postsList.get(0);
        assertThat(posts.getTitle()).isEqualTo(title);
        assertThat(posts.getContent()).isEqualTo(content);

그럴 땐 빠르게

import static org.assertj.core.api.Assertions.assertThat;

적으면 해결!

다른 애들처럼 자동으로 적히지 않기 때문에 까먹지 말고 적어야된다!

profile
Frontend developer

0개의 댓글