inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

테스트 추가하기: h2를 이용한 service 테스트

테스트 메서드 마다 Environment variables 설정이 불편...

해결된 질문

1119

pwmetus

작성한 질문수 2

0

강의시나리오 대로 진행하다보니 살짝 불편한 부분이 있어서..

(어쩜 중간에 코멘트가 있었는데 놓친것일 수도..)

서비스 설정 중 메일발송 설정 정보를 실행속성으로 구성하는데

테스트도 동일하게 구성하다보니(test-application.properties )

Intellij >Edit Configurations > JUnit 실행인스턴스 별 Environment variables 를 설정해줘야 실행이 되는듯 합니다.

 

테스트 메서드를 만들때마다 실행인스턴스를 설정해야하는게 불편해서

그냥 메일발송 설정을 test-application.properties 에 하드코딩하고 진행해봅니다.

(혹시.. 다른 더 스마트한 방법이 있을까? Intellij ? spring?)

 

[확인1]

'테스트 추가하기: h2를 이용한 repository 테스트' 강의 1:16초를 보면

git에서 받은 application.properties 파일과 강의의 소스가 다른것 으로 보입니다.

Environment variables 에서 설정한 속성이 없어서 해당 강의에서는 불편함 없이 진행된 것 으로 이해했습니다. 

 

[확인2] 그런데

'토이 프로젝트 살펴보기' 강의 7:42 에 확인되는 설정정보는

git 소스와 동일하것으로 확인됩니다.

강의를 훑어볼때는 그냥 넘어갔는데, 따라하며 보니 눈에 밟히는게 좀 있네요. 

 

[git 설정파일]

spring tdd jpa 소프트웨어-테스트 unittest

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

pwmetus님 질문에 대해 안내드리겠습니다.

IntelliJ IDEA에서 테스트 메서드마다 환경 변수(Environment variables)를 설정하는 것이 번거로운 경우, 다음과 같은 방법을 활용할 수 있습니다:

  1. 테스트 범위의 환경 변수를 application.propertiesapplication.yml 파일과 같은 Spring Boot의 외부화된 구성(externalized configuration)을 활용하여 설정합니다. 각 테스트마다 이러한 파일에 필요한 환경 설정을 명시하여 사용할 수 있습니다.

  2. Spring Boot 테스트 유틸리티를 사용하여 특정 테스트 환경변수를 프로그래매틱하게 추가할 수 있습니다. 예를 들어, @TestPropertyValues 애너테이션을 이용하여 테스트 실행 시 특정 환경 변수를 설정할 수 있습니다. 예제 코드는 아래와 같습니다:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;

class MyEnvironmentTests {

    @Test
    void testPropertySources() {
        MockEnvironment environment = new MockEnvironment();
        TestPropertyValues.of("org=Spring", "name=Boot").applyTo(environment);
        assertThat(environment.getProperty("name")).isEqualTo("Boot");
    }

}

이 방법을 통해, IntelliJ의 실행 설정에서 매번 환경 변수를 지정할 필요 없이 테스트마다 필요한 환경 변수를 간편하게 설정할 수 있습니다.

참조하신 ‘테스트 추가하기: h2를 이용한 repository 테스트’와 ‘토이 프로젝트 살펴보기’ 강의에서 다루는 설정 방법들은 강의 상황에 맞게 최적화된 설정이므로, 각 상황에 맞게 적절한 방법을 선택하여 적용하는 것이 좋습니다.

보다 자세한 정보는 Spring Boot 공식 문서 참조를 권장드립니다:

질문에 대해 충분한 답변이 되었기를 바라며, 추가적인 궁금증이 있으시면 질문해주세요.

UserService, CertificationService 책임 분리 기준 질문

0

28

1

service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존

0

59

1

Service 소형 테스트 질문

0

83

1

조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?

0

116

1

controller 의 port 패키지의 service 인터페이스 사용

0

72

1

빌드 문제

0

92

1

빌드 안 되시는 분들 참고

0

102

1

update에서 Repository.save

0

105

1

최종 완성된 코드를 받아 볼 수 있을까요?

0

156

1

의존성 역전으로 해결한 외부의존성?

0

162

1

좋은 설계

0

180

1

Controller에 테스트

0

139

1

JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성

0

242

0

영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용

0

224

1

인프라계층 구현체와 테스트 구현체에 대한 질문

0

223

1

실습 코드 커밋

0

372

1

UserEntity 메서드

0

293

2

CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것

0

217

1

레이어드 아키텍처 개발에 대하여

0

231

1

BDDMockito의 when을 사용한 코드가 given 절에 있는 이유가 궁금합니다.

0

223

1

테스트에서 주입과 생성

0

198

1

프로젝트 코드는 제공해주시지 않는건가요?

0

382

2

개선된 아키텍처의 구조

0

277

1

서비스 레이어의 단위 테스트 범위 고민

0

188

1