shirohoo
408
2021-05-02 13:04:46 작성 2021-05-02 13:21:51 수정됨
1
92

데이터소스 테스트 관련 질문드립니다. (JUnit5, IntelliJ)


테스트 코드 작성하는 것을 연습하고 있습니다.

헌데 제 생각에 테스트가 됐다고 생각하는데


커버리지 리포트를 보니 커버리지가 안잡히네요.


일단 프로퍼티파일에 대한 테스트는 커버리지 100%로 통과가 됐습니다.



커버리지 리포트에서 빨갛게 칠해진 부분이 테스트가 안됐다는 뜻 같아 보이는데

열려있는 getter가 없어서 어떤식으로 테스트해야 할지 잘 모르겠습니다.




커버리지 리포트


class DatabaseProperties
@Getter
@Configuration
@PropertySource (value = "file:${user.home}/env/db.properties")
public class DatabaseProperties {
    
    @Value ("${spring.datasource.url}")
    private String url;
    
    @Value ("${spring.datasource.username}")
    private String username;
    
    @Value ("${spring.datasource.password}")
    private String password;
    
}


class DatabaseConfig
@Configuration
@RequiredArgsConstructor
@EnableTransactionManagement
public class DatabaseConfig {
    
    private final DatabaseProperties databaseProperties;
    
    @Bean
    @Primary
    public DataSource createDataSourceByProperties() {
        return DataSourceBuilder.create()
                                .url(databaseProperties.getUrl())
                                .username(databaseProperties.getUsername())
                                .password(databaseProperties.getPassword())
                                .build();
    }
    
}


class DatabaseConfigTest
@SpringBootTest(classes = DatabaseProperties.class)
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
class DatabaseConfigTest {
    
    final DatabaseProperties databaseProperties;
    
    // given
    DatabaseConfigTest(DatabaseProperties databaseProperties) {
        this.databaseProperties = databaseProperties;
    }
    
    @Test
    @DisplayName("데이터소스생성")
    void createDataSourceByProperties() throws SQLException {
        // when
        DataSource dataSource = DataSourceBuilder.create()
                                                 .url(databaseProperties.getUrl())
                                                 .username(databaseProperties.getUsername())
                                                 .password(databaseProperties.getPassword())
                                                 .build();
        
        // then
        assertThat(dataSource).isNotNull()
                              .toString()
                              .contains("HikariDataSource");
        
        assertThat(dataSource.getConnection()).isNotNull()
                                              .toString()
                                              .startsWith("HikariProxyConnection");
        
    }
    
}






0
  • 답변 1

  • shirohoo
    408
    2021-05-02 13:21:56

    자문자답합니다..

    테스트 대상을 인스턴스화하여 테스트하고자 하는 코드를 호출해

    단정문을 걸어보니 커버리지가 잡혔습니다.


    @SpringBootTest(classes = {DatabaseProperties.class, DatabaseConfig.class})
    @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
    class DatabaseConfigTest {
        
        final DatabaseProperties databaseProperties;
        final DatabaseConfig databaseConfig;
        
        // given
        DatabaseConfigTest(DatabaseProperties databaseProperties,
                           DatabaseConfig databaseConfig) {
            this.databaseProperties = databaseProperties;
            this.databaseConfig = databaseConfig;
        }
        
        @Test
        @DisplayName("데이터소스생성")
        void createDataSourceByProperties() throws SQLException {
            // when
            DataSource dataSource = databaseConfig.createDataSourceByProperties();
            
            // then
            assertThat(dataSource).isNotNull()
                                  .toString()
                                  .contains("HikariDataSource");
            
            assertThat(dataSource.getConnection()).isNotNull()
                                                  .toString()
                                                  .startsWith("HikariProxyConnection");
            
        }
        
    }



  • 로그인을 하시면 답변을 등록할 수 있습니다.