window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() 테스트에서 컨테이너를 실행하는 방법에 대한 빠른 가이드 - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2022-08-16
소프트웨어 개발

테스트에서 컨테이너를 실행하는 방법에 대한 빠른 가이드

바르틀로미예 쿠친스키

수석 Java 개발자가 모든 마법을 보여주는 Java 관련 문서에서 컨테이너 양식 테스트를 실행하는 방법을 알아보세요.

사용 스프링 부팅 에서 프로젝트 를 사용하여 상용구를 줄입니다. 테스트 컨테이너는 다음과 독립적입니다. 스프링 프레임워크 없이도 사용할 수 있습니다.

테스트 컨테이너 버전 1.17.3을 사용하고 있지만 최신 버전을 자유롭게 사용하세요. Postgres 컨테이너로 테스트합니다.

먼저 컨테이너를 정의합니다:

public class Postgres13TC extends PostgreSQLContainer {
  비공개 정적 최종 Postgres13TC TC = new Postgres13TC();

  private Postgres13TC() {
    super("postgres:13.2");
  }

  public static Postgres13TC getInstance() {
    TC를 반환합니다;
  }

  @Override
  public void start() {
    super.start();
    System.setProperty("DB_URL", TC.getJdbcUrl());
    System.setProperty("DB_USERNAME", TC.getUsername());
    System.setProperty("DB_PASSWORD", TC.getPassword());
  }

  @Override
  public void stop() {
    // 아무것도 하지 않습니다. 이것은 공유 인스턴스입니다. 이 작업을 JVM이 처리하도록 합니다.
  }
}

그런 다음 Spring 애플리케이션 컨텍스트를 초기화합니다. 컨테이너 인스턴스에서 모든 데이터 소스 구성을 가져와서 Spring 구성으로 설정합니다:

public class ContainerInit 구현하는 ApplicationContextInitializer {

  public static Postgres13TC postgres13TC;

  static {
    postgres13TC = Postgres13TC.getInstance();
    postgres13TC.start();
  }

  @Override
  public void initialize(ConfigurableApplicationContext applicationContext) {
    TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
        applicationContext,
        "spring.datasource.url=" + postgres13TC.getJdbcUrl(),
        "spring.datasource.username=" + postgres13TC.getUsername(),
        "spring.datasource.password=" + postgres13TC.getPassword(),
        "db.host=" + postgres13TC.getHost(),
        "db.port=" + postgres13TC.getMappedPort(postgres13TC.POSTGRESQL_PORT),
        "db.name=" + postgres13TC.getDatabaseName(),
        "db.username=" + postgres13TC.getUsername(),
        "db.password=" + postgres13TC.getPassword()
    );
  }
}

마지막으로 테스트를 실행하면 모든 것이 내부에서 시작됩니다:

스프링부트테스트(웹환경 = RANDOM_PORT)
자동 구성 테스트 데이터베이스(대체 = NONE)
컨텍스트 구성(초기화자 = ContainerInit.class)
테스트 컨테이너
클래스 더미 리포지토리 테스트 {

  @Autowired
  비공개 DummyRepository dummyRepository;

  @Test
  void shouldReturnDummy() {
    var byId = dummyRepository.getById(10L);
    var expected = new Dummy();
    expected.setId(10L);
    assertThat(byId).completes().emitsCount(1).emits(expected);
  }
}

또는 Spring 독립 테스트를 실행하려면 컨테이너를 직접 사용할 수 있습니다:

테스트 컨테이너
SimpleDbTest 클래스 {

  @Container
  비공개 정적 최종 Postgres13TC postgres13TC = Postgres13TC.getInstance();

  @Test
  void testConnection() {
    assumeThat(postgres13TC.isRunning());
    var connectionProps = 새로운 속성();
    connectionProps.put("user", postgres13TC.getUsername());
    connectionProps.put("password", postgres13TC.getPassword());
    try (Connection connection = DriverManager.getConnection(postgres13TC.getJdbcUrl(),
        connectionProps)) {
    var resultSet = connection.prepareStatement("Select 1").executeQuery();
    resultSet.next();
    assertThat(resultSet.getInt(1)).isEqualTo(1);
    } catch (SQLException sqlException) {
    assertThat((Exception) sqlException).doesNotThrowAnyException();
    }
  }
}

요약

테스트컨테이너는 사용하기 매우 쉬운 도구로, Docker 컨테이너를 사용하는 통합 테스트를 생성하는 데 도움이 됩니다. 이를 통해 유연성이 향상되고 개발 속도가 빨라집니다. 테스트 구성을 올바르게 설정하면 새로운 개발자를 합류시키는 데 필요한 시간이 단축됩니다. 모든 종속성을 설정할 필요 없이 선택한 구성 파일로 작성된 테스트를 실행하기만 하면 됩니다.

협력 배너

관련 문서

소프트웨어 개발

Java로 프로그래밍할 때 피해야 할 9가지 실수

Java로 프로그래밍할 때 어떤 실수를 피해야 할까요? 다음 글에서 이 질문에 대한 답을 찾아보세요.

The Codest
라팔 사위키 Java 개발자
엔터프라이즈 및 스케일업 솔루션

Java가 비즈니스를 어떻게 지원할 수 있을까요?

시작하기 전에 한 가지 중요한 점을 상기시켜드리고 싶습니다. Java는 단순한 프로그래밍 언어가 아닙니다.

바르틀로미예 쿠친스키
엔터프라이즈 및 스케일업 솔루션

최고의 Java 개발자를 찾는 올바른 방법

완벽한 Java 개발자를 찾는 것은 어려운 일이 될 수 있습니다. 이러한 전문가에 대한 시장 수요가 놀라운 속도로 증가함에 따라 인재를 찾을 수 있는 소스는 때때로 부족해 보일 수 있습니다.

The Codest
그레고르즈 로즈무스 자바 유닛 리더

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean