The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-08-16
ソフトウェア開発

テストからコンテナを実行する方法のクイックガイド

バルトロミエ・クシンスキ

コンテナ・フォーム・テストの実行方法については、Java関連の記事でシニアJava開発者がすべてのマジックを紹介しています。

私はこうしている。 スプリングブート での プロジェクト を使うことで、定型文を減らすことができる。テスト・コンテナは スプリングフレームワーク そして、それを使わずに使うこともできる。

Testcontainersのバージョンは1.17.3を使用していますが、最新のものをご自由にお使いください。Postgresコンテナでのテスト。

まずコンテナを定義する:

public class Postgres13TC extends PostgreSQLContainer { 次のようになります。
  private static final Postgres13TC TC = new Postgres13TC();

  プライベートPostgres13TC()
    super("postgres:13.2");
  }

  public static Postgres13TC getInstance() { { { { { Postgres13TCを取得します。
    TC を返します;
  }

  オーバーライド
  public void start() {
    super.start();
    System.setProperty("DB_URL", TC.getJdbcUrl());
    System.setProperty("DB_USERNAME", TC.getUsername());;
    System.setProperty("DB_PASSWORD", TC.getPassword());
  }

  オーバーライド
  public void stop() { // 何もしない。
    // 何もしない。これは共有インスタンスだ。この操作はJVMに任せてください。
  }
}

その後、Springアプリケーションコンテキストを初期化します。コンテナインスタンスからすべてのデータソース設定を取得し、Springの設定として設定する:

public class ContainerInit implements ApplicationContextInitializer {.

  public static Postgres13TC postgres13TC;

  スタティック
    postgres13TC = Postgres13TC.getInstance();
    postgres13TC.start();
  }

  オーバーライド
  public void initialize(ConfigurableApplicationContext applicationContext) { } @override
    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()
    );
  }
}

最後にテストを実行すれば、ボンネットの中ですべてが開始される:

SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(replace = NONE)
@ContextConfiguration(initializers = ContainerInit.class)
テストコンテナ
クラス DummyRepositoryTest

  自動化
  private DummyRepository dummyRepository;

  テスト
  void shouldReturnDummy() { 以下のようにします。
    var byId = dummyRepository.getById(10L);
    var expected = new Dummy();
    expected.setId(10L);
    assertThat(byId).completes().emitsCount(1).emits(expected);
  }
}

また、Springに依存しないテストを実行したい場合は、コンテナを直接使用することもできる:

テストコンテナ
クラス SimpleDbTest

  コンテナ
  private static final Postgres13TC postgres13TC = Postgres13TC.getInstance();

  テスト
  void testConnection() {
    assumeThat(postgres13TC.isRunning());
    var connectionProps = new Properties();
    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();
    }
  }
}

まとめ

Testcontainers are very easy-to-use tools that help us to create integration tests that use Docker containers. That gives us more flexibility and increases development speed. Proper setup of test configuration reduces the time needed to board new developers. They don’t need to set up all dependencies, just run the written tests with selected configuration files.

協力バナー

関連記事

ソフトウェア開発

Javaプログラミングで避けるべき9つの間違い

Javaでのプログラミングで避けるべき間違いとは?次の記事では、この質問にお答えします。

The Codest
ラファル・サヴィツキ Java開発者
エンタープライズ&スケールアップ・ソリューション

Javaはあなたのビジネスをどうサポートできるか?

始める前に、ひとつ重要なことを思い出していただきたい。Javaは単なるプログラミング言語ではない。

バルトロミエ・クジンスキー
エンタープライズ&スケールアップ・ソリューション

トップJava開発者を見つける正しい方法

完璧なJava開発者を見つけるのは大変な作業です。そのような専門家に対する市場の需要が驚異的なペースで成長する中、人材発掘のための利用可能な情報源は、時に...

The Codest
グジェゴシュ・ロズムス Javaユニットリーダー

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    Copyright © 2026 by The Codest. All rights reserved.

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