すべてのプロダクト
Search
ドキュメントセンター

AI Coding Assistant Lingma:単体テストのベストプラクティス

最終更新日:Jun 09, 2025

Lingma を使用して効果的な単体テストを作成する方法について説明します。

単体テストとは

単体テストとは、開発者がアプリケーションのテスト可能な最小単位(関数、メソッド、クラスなど)の正確性を検証するためのコードを作成するソフトウェアテスト手法です。開発者は、機能の実装中または実装後に単体テストを作成して、各ユニットが設計どおりに機能することを確認します。

単体テストの価値

単体テストの価値は、主にソフトウェアの品質と信頼性の向上に反映され、変更やリファクタリング後もコードが適切に機能し続けることを保証します単体テストの利点は次のとおりです。

  • コード品質の向上:コードのエラーや脆弱性を発見し、コードの品質と信頼性を向上させます。

  • 開発効率の向上:開発中に問題を迅速に特定し、開発サイクルとコストを削減します。

  • リファクタリングとメンテナンスの容易化:リファクタリングとメンテナンス中にコードが新しいエラーや脆弱性を導入しないようにします。

  • チームコラボレーションの強化:チームメンバー間のコミュニケーションとコラボレーションのツールとして機能し、チームコラボレーションの効率と品質を向上させます。

さらに、単体テストを使用すると、ソフトウェアの障害をできるだけ早く検出できます。これにより、後でバグを特定して修復することが困難になることによる損失を防ぎます。単体テストの回帰可能性は、ソフトウェアと後続のリファクタリングのセキュリティ保護を提供します。また、単体テストは、ソフトウェアユニットの使用方法を示すための手順とサンプルコードも提供します。

従うべき原則

適切な単体テストは空気のように目立たず、ソフトウェアテストの品質を確保する必要があります。マクロな観点から見ると、適切な単体テストは自動(A)、独立(I)、反復可能(R)である必要があります。

  • A:自動:コードが変更されたときに、新しく追加されたコードが既存の機能を壊さないことを迅速に確認するために、単体テストを自動的に実行する必要があります。通常、単体テストは継続的インテグレーションに統合され、コードが変更されるたびに単体テストが自動的にトリガーされます。

  • I:独立:各単体テストは独立しており、他のテストの実行順序や結果に依存しないようにする必要があります。単体テストの独立性を確保するには、アプリケーションのテスト可能な最小単位をテストする必要があります。

  • R:反復可能:適切な単体テストは、実行されるたびに同じ条件下で同じ結果を生成する必要があります。テストは、ネットワーク、データベース、ファイルシステムなどの外部要因に依存することはできません。これらの外部依存関係は正しくモックする必要があります。

さらに、適切な単体テストには、明確なアサーション、高速な実行、徹底的な境界テスト、高いカバレッジも必要です。これらの原則に従う単体テストは適格であり、コード品質保証の重要な部分です。

単体テストを作成する

このセクションでは、Java で単体テストを作成する方法について説明します。

詳細なテストケースを分解する

ブランチを検討する

単体テストを作成するときは、コード内のすべてのブランチを検討する必要があります。ブランチには、IFIF ELSESWITCH 文が含まれます。各ブランチは個別にテストする必要があります。次に例を示します。

public String classifyNumber(int number) {
    if (number < 0) {
        return "negative";
    } else if (number == 0) {
        return "zero";
    } else {
        return "positive";
    }
}

上記のコードでは、次のブランチをテストする必要があります。

  • number < 0.

  • number == 0.

  • number > 0.

各ブランチにテストケースを作成する必要があります。

境界条件を見つける

ブランチに加えて、境界条件も考慮する必要があります。たとえば、上記の分類関数の場合、境界値は -1、0、1 です。境界条件テストでは、潜在的な問題を特定し、コードが極端な条件下で適切に機能することを確認できます。

統一されたテスト標準を確立する

命名規則

単体テストクラスは、クラス名 + Test の形式で名前が付けられます。たとえば、Calculator クラスをテストする場合、単体テストクラスの名前は CalculatorTest になります。単体テストメソッドの名前は、テストする特定の内容を説明する必要があります。次に例を示します。

public class CalculatorTest {
    @Test
    public void testAddition() {
        // テスト対象の内容。
    }
    @Test
    public void testSubtraction() {
        // テスト対象の内容。
    }
}

保存パス

一般に、単体テストクラスは、テスト対象のクラスと同じパッケージ名で、異なるディレクトリに保存されます。たとえば、Maven プロジェクトの標準構造では、ソースコードは src/main/java ディレクトリに保存され、単体テストコードは src/test/java ディレクトリに保存されます。

src/main/java/com/example/Calculator.java
src/test/java/com/example/CalculatorTest.java

適切なテストフレームワークを選択する

JUnit と Mockito は、Java の一般的な単体テストフレームワークです。このセクションでは、これら 2 つのフレームワークを使用して基本的な単体テストを作成する方法について説明します。

Junit

JUnit は、Java で最も有名な単体テストフレームワークです。簡潔で使いやすく、幅広いアノテーションとアサーションを提供します。

  1. JUnit を依存関係として追加します。この例では、Maven 依存関係が使用されています。

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  2. 単体テストを作成します。

    import org.junit.Test;
    import static org.junit.Assert.*;
    
    public class CalculatorTest {
        @Test
        public void testAddition() {
            Calculator calculator = new Calculator();
            assertEquals(5, calculator.add(2, 3));
        }
    }

Mockito

Mockito は強力なモッキングフレームワークであり、モックオブジェクトを作成して単体テストを簡素化できます。特に、依存関係のテストを作成するのが容易でない場合に役立ちます。

  1. Mockito を依存関係として追加します。

    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>3.11.2</version>
      <scope>test</scope>
    </dependency>
  2. 単体テストを作成します。

    import static org.mockito.Mockito.*;
    import org.junit.Test;
    
    public class UserServiceTest {
        @Test
        public void testGetUser() {
            UserService userService = new UserService();
            UserRepository mockRepo = mock(UserRepository.class);
    
            when(mockRepo.findUserById(1)).thenReturn(new User(1, "John Doe"));
            userService.setUserRepository(mockRepo);
    
            User user = userService.getUserById(1);
            assertNotNull(user);
            assertEquals("John Doe", user.getName());
        }
    }

Lingma を使用して単体テストを迅速に生成する方法

ほとんどの開発者は、プログラミングの習慣に基づいて、テスト後開発を採用しています。つまり、最初にコードを記述し、後でそのコードの単体テストを記述します。このコンテキストでは、Lingma を使用して単体テストを生成すると特に便利です。次のセクションでは、Lingma を使用して単体テストを生成するいくつかの方法について説明します。

コードを選択して単体テストを生成する

IDE エディターで、コードの一部を選択し、/unittest を使用して、選択したコードに対応する単体テストを生成します。

整屏示例@1x (5)

説明

/unit test コマンドを使用する場合は、チャットボックスにコンテキストを追加して、開発者のニーズにより適したテストケースを生成します。たとえば、JUnit5 をサポートする必要がある場合、またはモッキングに Mockito を使用する必要がある場合は、/unit test JUnit5 Mockito を使用できます。コマンドの後にある 2 つのキーワードは、前のコマンドのパラメーターです。この方法は、他のコマンドにも適用されます。

ショートカットボタンを使用して単体テストを生成する

各メソッドシグネチャの上にある Lingma アイコンをクリックし、ドロップダウンメニューで [単体テスト] を選択します。

image

コードブロックを選択して単体テストを生成することもできます。選択したコードブロックを右クリックし、Lingma > [単体テスト] を選択します。

image

単体テストを適用する

単体テストコードが生成されると、AI チャットパネルのコードブロックの右上隅に 3 つのアイコンが表示されます。

  • コードの挿入: 生成された単体テストコードを現在開いているファイルに挿入できます。

  • コピー: コードブロック内の生成された単体テストコードをコピーし、コードを貼り付けるファイルを選択できます。

  • ファイルの作成: Java の単体テストの原則に基づいて、単体テストメソッドが格納されているテストディレクトリに単体テストクラスファイルを生成できます。同じ名前の単体テストクラスファイルが既に存在する場合は、既存のファイルを上書きするかどうかを決定する必要があります。

image

生成された単体テストについて質問する

生成された単体テストコードに満足できない場合、または特定の単体テストフレームワークを使用する必要がある場合、あるいはより多くの単体テストメソッドを生成する必要がある場合は、チャットボックスに質問を入力するか、再試行Mockito を使用するSpring Test を使用するコードの説明 などの事前設定された単体テストの質問タグをクリックして、生成された単体テストコードに満足するまでさらに質問します。

image

説明

ほとんどの場合、Lingma は一般的なテストケースを生成しますが、すべてのシナリオを網羅するわけではありません。生成されたテストケースが不十分だと考える場合は、次のことをお勧めします。1. まず、生成されたテストケースを受け入れて、テストファイルに追加します。 2. テストファイルに切り替えて、コード補完機能を使用します。 Lingma は、新しいテストケースの作成を継続するのに役立ちます。

概要

単体テストは、コード品質を確保するための不可欠なプログラミングプラクティスです。テスト駆動開発(TDD)におけるテストファーストのアプローチは、反復を通じてより良いコード設計を大幅に促進します。Lingma は、単体テストフレームワークのセットアップとテストケースの作成のワークロードを削減しながら、追加のテストシナリオを提案し、コード変更にテストを適応させることで、テストケースを最新の状態に保つのに役立ちます。