結合テスト

Javaによるテスト入門

Maria Milusheva

Senior Software Engineer

結合テストの定義

  • 結合 — 個々のソフトウェア部品やサブシステムを統合し、まとまりある一つのシステムとして動作させること。
  • 結合テスト — 複数コンポーネント/モジュール間の連携を検証し、正しく一緒に動くことを確認するテスト。外部依存を伴うことが多い。

組み立て直前のIKEA家具の画像

Javaによるテスト入門

依存関係

  • ソフトウェア依存関係 — あるコンポーネントが別のコンポーネントに依存して動作する関係

1 Chart made using Mermaid: https://mermaid.live
Javaによるテスト入門

結合テスト vs. ユニットテスト

ユニットテスト:

  • 個々のコンポーネントを単体で検証
  • 失敗は特定の箇所に直結
  • 作成・実行が速い
  • 依存を避けるための各種ツールを使用
  • 厳密な結果に対してアサート

結合テスト:

  • 複数コンポーネントとその相互作用を検証
  • 失敗の原因追跡に時間を要することがある
  • 準備・実行が重く長引く場合がある
  • 実際の依存先との実相互作用をテスト
  • 厳密値ではなく一般的な挙動をアサートすることがある
Javaによるテスト入門

例: 外貨両替

通貨両替アプリを作るとします。

public class ExchangeApp {
    private EuropeanCentralBankServer bank; // Enables ExchangeApp to use the bank server

    public ExchangeApp(EuropeanCentralBankServer bank) {
        this.bank = bank; // Save the object passed through the constructor
    }


public double convertEuroTo(String currency, double amount) { double rate = this.bank.getRateEuroTo(currency); return amount * rate; // Use the return values of the bank method in calculations } }
Javaによるテスト入門

外貨両替の結合テスト

結合テストは convertEuroTo メソッドと EuropeanCentralBankServer の両方を検証します。

@Test
void convert_convertsWithoutError() {
    EuropeanCentralBankServer bank = new EuropeanCentralBankServer();
    ExchangeApp exchangeApp = new ExchangeApp(bank); // Pass bank object to constructor

double amount = 1000.0; String currency = "USD"; // convertEuroTo calls getRateEuroTo from the bank object double result = exchangeApp.convertEuroTo(currency, amount); assertTrue(result > 0); // Can't predict exact value, can only sanity test }
Javaによるテスト入門

練習しましょう!

Javaによるテスト入門

Preparing Video For Download...