인프런 커뮤니티 질문&답변

이건형님의 프로필 이미지
이건형

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

DataSource 이해

단위 테스트시, 스프링 컨테이너에 등록된 Bean 사용 방법

작성

·

416

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요 스프링 강의 듣는 도중 질문 사항이 생겨서 문의 드립니다.

보통 단위테스트를 진행할 때, 테스트에 필요한 객체들을 주입해서 사용하는 것이 아니라, 객체를 따로 생성해서 테스트를 하는데, 그런게 아니고 직접 의존 관계를 주입해서 바로 테스트할 수는 없는건가요?

예를들면,

public class DbConTest {


    DBConnection dbConnection;

    @Test
    void dbConTest() throws SQLException {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mariadb://localhost:9898/dddddd");
        dataSource.setUsername("root");
        dataSource.setPassword("root");

        dbConnection = new DBConnectionImpl(dataSource);
        dbConnection.dbconnection();

    }
}

이렇게가 아닌,

public class DbConTest {


    private final DBConnection dbConnection;
    private final DataSource dataSource;

    public DbConTest(DBConnection dbConnection, DataSource dataSource) {
        this.dbConnection = dbConnection;
        this.dataSource = dataSource;
    }

    @Test
    void dbConTest() throws SQLException {
        dbConnection.dbconnection();
    }
}

이렇게요!!

답변 1

0

이건형님의 프로필 이미지
이건형
질문자

@TestConfiguration을 사용해서 따로 Bean으로 등록하고 사용하니 잘되네요!

저는 DataSource같은거는 자동으로 Bean으로 등록되어서, 따로 등록해주지 않아도 되는줄 알았는데 아니었네요 혹시 또 다른 방법이 있으면 알려주시면 감사하겠습니다!

 

@SpringBootTest
public class DbConTest {
    private final DataSource dataSource;
    private final DBConnection dbConnection;

    @Autowired
    public DbConTest(DataSource dataSource, DBConnection dbConnection) {
        this.dataSource = dataSource;
        this.dbConnection = dbConnection;
    }

    @TestConfiguration
    static class TestConfig {
        private final DBConnection dbConnection;
        private final DataSource dataSource;
        
        public TestConfig(DBConnection dbConnection, DataSource dataSource) {
            this.dbConnection = dbConnection;
            this.dataSource = dataSource;
        }

        }
        
    @Test
    void dbConTest() throws SQLException {
        dbConnection.dbconnection();
    }
}
김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이건형님

@TestConfiguration을 사용하거나 또는 직접 하나하나 객체를 생성해서 직접 주입해서 테스트를 돌려보아도 됩니다.

감사합니다.

이건형님의 프로필 이미지
이건형

작성한 질문수

질문하기