「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JUnit と Mockito を使用した Spring Boot でのテストの自動化

JUnit と Mockito を使用した Spring Boot でのテストの自動化

2024 年 11 月 9 日に公開
ブラウズ:484

Automating Tests in Spring Boot with JUnit and Mockito

ソフトウェア開発では、特にシステムが複雑になるにつれて、高品質のコードを維持することが重要です。自動テストは、新機能が既存の機能を壊さず、長期にわたってコードの堅牢性と信頼性が維持されることを保証する上で極めて重要な役割を果たします。 Spring Boot アプリケーションの場合、JUnit と Mockito は、それぞれ単体テストと依存関係のモック用の 2 つの最も人気のあるツールです。この投稿では、これらのツールを活用して Spring Boot で効果的な自動テストを作成し、アプリケーションの安定性と保守性を確保する方法を検討します。

JUnit は、広く使用されている Java のテスト フレームワークであり、テストの構造化と効率的な実行に役立つアノテーションとアサーションを提供します。これにより、開発者は反復可能なテストを作成でき、単体テストと統合テストの両方がサポートされます。一方、Mockito は、テスト目的でモック オブジェクトを作成できる強力なモック フレームワークです。これにより、開発者は複雑な依存関係の動作をシミュレートし、テスト対象の機能を分離できます。 JUnit を Mockito と組み合わせて使用​​すると、実際のデータベース接続、外部サービス、複雑な構成に依存することなく、Spring Boot アプリケーションのビジネス ロジックを徹底的にテストできます。

実際の例を見て、Spring Boot アプリケーションで JUnit と Mockito をどのように併用できるかを見てみましょう。単純なサービス クラスを作成し、JUnit と Mockito を使用してそのテストを作成します。

ユーザー データを取得するために UserRepository に依存する UserService クラスがあるとします。

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(Long id) {
        return userRepository.findById(id)
                .orElseThrow(() -> new UserNotFoundException("User not found"));
    }
}

ここで、UserServiceはSpring Data JPAリポジトリインターフェースであるUserRepositoryに依存しています。データベースにアクセスせずに getUserById メソッドをテストするには、Mockito を使用して UserRepository をモックし、JUnit を使用して UserService.

の動作をアサートします。

UserService のテストを作成する方法は次のとおりです:

@SpringBootTest
public class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.openMocks(this);
    }

    @Test
    public void testGetUserById_Success() {
        // Arrange
        User user = new User(1L, "John Doe", "[email protected]");
        when(userRepository.findById(1L)).thenReturn(Optional.of(user));

        // Act
        User result = userService.getUserById(1L);

        // Assert
        assertEquals("John Doe", result.getName());
        assertEquals("[email protected]", result.getEmail());
    }

    @Test
    public void testGetUserById_UserNotFound() {
        // Arrange
        when(userRepository.findById(1L)).thenReturn(Optional.empty());

        // Act & Assert
        assertThrows(UserNotFoundException.class, () -> userService.getUserById(1L));
    }
}

UserServiceTest クラスでは、@Mock アノテーションを使用して UserRepository のモック インスタンスを作成し、@InjectMocks アノテーションを使用してこのモックを UserService に注入します。 setUp メソッドは、各テストの前にモックを初期化します。

次に 2 つのテストを定義します。

testGetUserById_Success: このテストは、UserRepository によってユーザーが見つかったときに、UserService が正しいユーザーを返すことを検証します。
testGetUserById_UserNotFound: このテストでは、UserRepository が空の結果を返したときに、UserService が UserNotFoundException をスローすることを確認します。
これらのテストにより、実際のデータベースに依存することなく UserService の動作を検証できるため、より高速かつ信頼性が高くなります。

Spring Boot アプリケーションで JUnit と Mockito を使用してテストを自動化すると、コードの品質とアプリケーションの安定性を確保する強力な方法が提供されます。包括的な単体テストを作成することで、開発者は開発プロセスの早い段階でバグを発見できるため、コードのリファクタリングや自信を持った新機能の追加が容易になります。 JUnit と Mockito を組み合わせることで、外部依存関係の複雑さから解放され、アプリケーションのビジネス ロジックに焦点を当てた明確で簡潔なテストが可能になります。

自動テストを中心的な実践として取り入れると、コードベースの信頼性が向上するだけでなく、全体的な開発ワークフローも強化されます。これらのテストを CI/CD パイプラインに統合することで、品質チェックが自動化され、一貫性が保たれるようになり、より機敏で回復力のある開発プロセスへの道が開かれます。したがって、新しいプロジェクトを開始する場合でも、既存のプロジェクトを拡張する場合でも、JUnit と Mockito を使用した自動テストを開発戦略の一部にしてください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/matheusmartinello/automating-tests-in-spring-boot-with-junit-and-mockito-49ip?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3