SSAFY11th-book-study / book-study

SSAFY 11기 6반의 '토비의 스프링 스터디'
0 stars 0 forks source link

[2.3] @Before #22

Closed limjongheok closed 6 months ago

limjongheok commented 6 months ago

@Before 은 test 매소드 마다 매번 실행 한다로 알고있는데

@DirtiesContext
public class UserDaoTest {

    @Autowired
    private UserDao dao;
    private User user1, user2, user3;
    @Before
    public void setUp(){
        DataSource dataSource = new SingleConnectionDataSource( url, userName, password, true);
        dao.set(dataSource);
}

다음 처럼 한번 생성 하면 계속 유지 되는 데이터 변경하지 않을 거라 확신하는 데이터는 @BeforeAll , @BeforeClass 를 사용하여 전역 처럼 관리하는것이 더 좋지 않을까 생각해 봅니다. 혹시 위처럼 변경 안할 거라고 확신하는 코드도 @Before 로 사용해서 매번 가비지 컬랙터가 회수하는 것이 전역으로 관리하는 것 보다 더 좋은 점이 있나요??

gmelon commented 6 months ago

저도 그렇게 생각합니다. 테스트에 사용되는 변하지 않는 값이면 ApplicationContext와 그 안의 싱글톤 빈처럼 전역으로 사용하는게 좋다고 생각합니다.

그런데 궁금한 점이 책에서는 JUnit이 테스트마다 테스트 클래스의 오브젝트를 새롭게 생성한다고 했는데 그럼 \@Before 은 인스턴스 초기화 블럭, @BeforeAll 은 static 초기화 블럭처럼 작동한다고 이해해도 괜찮은 걸까요?

limjongheok commented 6 months ago
  1. 변경하지 않을거라는 확신은 없다.
  2. 자바 가비지 컬랙션이 좋다 보니 사소한 생성 메모리 관한 문제는 관심 갖지 말자