亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
なぜJunit 5 Mockitoを使用するのですか?
1?;镜膜虱h(huán)境構(gòu)築
2。モキトを使用して、依存関係オブジェクトをシミュレートします
テストクラスを作成します
キーポイント説明:
3。動(dòng)作の検証
4.例外と境界の狀況を処理します
5。ヒントとベストプラクティス
ホームページ Java &#&チュートリアル Junit 5とMockitoを使用したJavaでのユニットテストとモッキング

Junit 5とMockitoを使用したJavaでのユニットテストとモッキング

Jul 29, 2025 am 01:20 AM
java 単體テスト

Junit 5とMockitoを使用して、単體テストの依存関係を効果的に分離します。 1. @mockを介してモックオブジェクトを作成し、@injectmocksテスト済みインスタンスを挿入します。 2。when()。sonreturn()を使用してシミュレーションの動(dòng)作を定義し、()を検証してメソッド呼び出しとパラメーターの數(shù)を確認(rèn)します。 3。例外シナリオをシミュレートし、エラー処理を確認(rèn)できます。 4.コンストラクターの注入を推奨し、過剰なシミュレーションを避け、テスト原子性を維持します。 5。Assertall()を使用してアサーションをマージし、@Nestedはテストシナリオを編成して、テストの保守性と信頼性を向上させます。

Junit 5とMockitoを使用したJavaでのユニットテストとモッキング

ユニットテストとモッキングは、Javaのコード品質(zhì)を確保するための重要な手段であり、Junit 5とMockitoはテストフレームワークの最も人気のある組み合わせです。特に外部サービス、データベース、または複雑なオブジェクトに依存するシナリオについては、ビジネスロジックを効率的に分離するために協(xié)力します。

Junit 5とMockitoを使用したJavaでのユニットテストとモッキング

なぜJunit 5 Mockitoを使用するのですか?

Junit 5は、Javaの主流の単體テストフレームワークであり、より柔軟な注釈モデル、拡張メカニズム、およびアサーション機(jī)能を提供します。 Mockitoは、「偽の」オブジェクトを作成および構(gòu)成して実際の依存関係を置き換えることができる強(qiáng)力なモッキングフレームワークであり、ターゲットクラスの動(dòng)作のテストに焦點(diǎn)を當(dāng)てることができます。

2つを組み合わせると、次のことができます。

Junit 5とMockitoを使用したJavaでのユニットテストとモッキング
  • テストされたコードを外部依存関係から分離します
  • メソッド呼び出しとパラメーターの數(shù)を確認(rèn)します
  • 例外と境界條件をシミュレートします
  • テストの保守性と実行速度を改善します

1?;镜膜虱h(huán)境構(gòu)築

まず、プロジェクトがJunit 5とMockitoの依存関係を?qū)毪筏皮い毪长趣虼_認(rèn)してください。 Mavenを使用している場合は、 pom.xmlに以下を追加します。

 <依存関係>
    <! -  Junit 5->
    <依存関係>
        <groupId> org.junit.jupiter </groupId>
        <artifactid> junit-jupiter </artifactid>
        <バージョン> 5.10.0 </version>
        <scope>テスト</scope>
    </依存関係>

    <! -  mockito->
    <依存関係>
        <groupid> org.mockito </groupid>
        <artifactid> mockito-core </artifactid>
        <バージョン> 5.7.0 </version>
        <scope>テスト</scope>
    </依存関係>

    <! - モッキートジュニットジュピターサポート(オプション、@mockアノテーションの自動(dòng)初期化に使用) - >
    <依存関係>
        <groupid> org.mockito </groupid>
        <artifactid> mockito-junit-jupiter </artifactid>
        <バージョン> 5.7.0 </version>
        <scope>テスト</scope>
    </依存関係>
</依存関係>

また、Junit 5をサポートするビルド構(gòu)成を使用してください(Surefireプラグインバージョン> = 2.22.0など)。

Junit 5とMockitoを使用したJavaでのユニットテストとモッキング

2。モキトを使用して、依存関係オブジェクトをシミュレートします

Payment Gateway PaymentGatewayインターフェイスに依存する注文サービスOrderServiceがあるとします。

パブリックインターフェイスPayuneGateway {
    ブールチャージ(二重量);
}

パブリッククラスのOrderservice {
    プライベートファイナルペイメントゲートウェイPaybeGategateway;

    Public Orderservice(PaymentGateGateway PayuneGateway){
        this.paymentgateway = paymentgateway;
    }

    パブリックブールプロセスオーダー(二重量){
        if(rument <= 0)falseを返します。
        Return PaymentGateway.Charge(額);
    }
}

OrderService.processOrder()をテストしたいのですが、実際に支払いシステムを呼び出したくありません?,F(xiàn)時(shí)點(diǎn)では、Mockitoを使用してシミュレートされたPaymentGatewayを作成できます。

テストクラスを作成します

org.junit.jupiter.api.testをインポートします。
Import org.mockito.injectmocks;
Import org.mockito.mock;
static org.junit.jupiter.api.assertions。*;
static org.mockito.mockito。*;

class OrderServicETEST {

    @mock
    PrivateGateGateway PaymentGateway;

    @injectmocks
    Private Orderservice Orderservice;

    // @mockと@injectmocksを自動(dòng)的に初期化するには、mockitoextensionと協(xié)力する必要があります
    @org.junit.jupiter.api.extension.extendwith(mockitoextension.class)
    靜的クラスネスト{}

    @テスト
    void sexturnfalse_whenamountisinvalid(){
        //テストBoolean result = OrderService.ProcessOrder(-100)でメソッドを呼び出します。

        // assert result assertfalse(result);

        // Payment Gatewayがverify(payburegateway、never())。
    }

    @テスト
    void sexturntrue_whenpaymentsucceeds(){{
        //(PayuneGateway.Charge(100.0))。sonreturn(true);

        // boolean result = OrderService.ProcessOrder(100.0)を?qū)g行します。

        // assert asserttrue(result);
        Verify(PaymentGateway).Charge(100.0);
    }

    @テスト
    void sexturnfalse_whenpaymentfails(){
        when(faymentgateway.Charge(100.0))。thenreturn(false);

        boolean result = Orderservice.Processorder(100.0);

        assertfalse(result);
        Verify(PaymentGateway).Charge(100.0);
    }
}

キーポイント説明:

  • @Mock :模擬オブジェクトを作成する(mock)
  • @InjectMocks :ターゲットクラスインスタンスを作成し、 @Mockタグ付きフィールドを自動(dòng)的に挿入します(コンストラクターまたはフィールドインジェクションを介して)
  • @ExtendWith(MockitoExtension.class) :mockitoのjunit拡張がアノテーションを自動(dòng)的に初期化できるようにします
  • when(...).thenReturn(...) :シミュレーション方法の返品値を定義します
  • verify(...) :メソッドが呼び出されたかどうか、および呼び出し、パラメーターなどの數(shù)を確認(rèn)します。

3。動(dòng)作の検証

返品値の主張に加えて、メソッドが正しく呼ばれていることを確認(rèn)することもできます。例えば:

 @テスト
void shuldattemptexexactlyonce(){
    when(faymentgateway.Charge(50.0))。thenreturn(true);

    OrderService.ProcessOrder(50.0);

    //充電メソッドが1回呼び出され、パラメーターが50.0であることを確認(rèn)します
    BERIFY(PaymentGateway、Times(1))。Charge(Eq(50.0));
}

その他の一般的な検証方法:

  • never() :呼び出されません
  • atLeastOnce() :少なくとも1回
  • timeout(100) :指定された時(shí)間內(nèi)に呼び出されます(非同期の場合)
  • inOrder(...) :コールオーダーを確認(rèn)します
//例:inorder inorder = inorder(Paymineggateway)を確認(rèn)します。
inorder.verify(PaymentGateway).Charge(30.0);
inorder.verify(PaymentGateway).Charge(20.0);

4.例外と境界の狀況を処理します

Mock Objectをスローした例外を使用して、エラー処理ロジックをテストできます。

 @テスト
void shuldhandlepaymentfailureduetoexception(){
    when(payburegateway.charge(100.0))

    assertthrows(runtimeexception.class、() - > {
        OrderService.ProcessOrder(100.0);
    });

    Verify(PaymentGateway).Charge(100.0);
}

doThrow()使用して、 doReturn()と協(xié)力して、 voidメソッドまたは特別なシナリオに対処することもできます。


5。ヒントとベストプラクティス

  • 過剰な混合を避ける:本當(dāng)に分離が必要な依存関係のみをシミュレートし、リンク全體をシミュレートしないでください
  • 優(yōu)先コンストラクターインジェクション:テスト中にモックオブジェクトを渡すのは簡単です
  • テスト原子性を維持する:テストは1つの動(dòng)作のみを検証する
  • assertAll()を使用したバッチアサーション
@テスト
void multipreasSertions(){
    when(faymentgateway.Charge(100.0))。thenreturn(true);

    boolean result = Orderservice.Processorder(100.0);

    Assertall(
        () - > asserttrue(result)、
        () - > verify(paybeggateway).Charge(100.0)
    );
}
  • @Nestedテストクラスを使用して、さまざまなシナリオを整理します。
 @nested
class whenamountispositive {
    @テスト
    void sequechargepaymentgateway(){...}
}

基本的にそれだけです。 Junit 5 Mockitoの組み合わせにより、Javaユニットテストは直感的で強(qiáng)力になります。重要なのは、「テストの実裝」ではなく「テスト動(dòng)作」を理解し、モックを介した依存関係を制御して、テストが高速で安定し、再現(xiàn)可能であることを確認(rèn)することです。

以上がJunit 5とMockitoを使用したJavaでのユニットテストとモッキングの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaプロジェクト管理のためのMavenの開発者ガイド Javaプロジェクト管理のためのMavenの開発者ガイド Jul 30, 2025 am 02:41 AM

Mavenは、Javaプロジェクト管理と建設(shè)の標(biāo)準(zhǔn)ツールです。答えは、POM.xmlを使用してプロジェクト構(gòu)造、依存関係管理、建設(shè)ライフサイクルの自動(dòng)化、プラグイン拡張機(jī)能を標(biāo)準(zhǔn)化するという事実にあります。 1. pom.xmlを使用して、GroupID、artifactid、バージョン、依存関係を定義します。 2。MVNCLEAN、コンパイル、テスト、パッケージ、インストール、展開などのマスターコアコマンド。 3.依存関係管理と除外を使用して、依存関係バージョンと競合を管理します。 4.マルチモジュールプロジェクト構(gòu)造を通じて大規(guī)模なアプリケーションを整理し、親POMによって均一に管理されます。 5。

Jakarta EEとJavaにRESTFUL APIを構(gòu)築します Jakarta EEとJavaにRESTFUL APIを構(gòu)築します Jul 30, 2025 am 03:05 AM

setupamaven/gradleprojectwithjax-rsdependencieslikejersey; 2.createarestresourceingnotationssuchas@pathand@get; 3.configuretheapplicationviaapplicationubclassorweb.xml;

ハッシュにJava Messagedigestを使用する方法(MD5、SHA-256)? ハッシュにJava Messagedigestを使用する方法(MD5、SHA-256)? Jul 30, 2025 am 02:58 AM

Javaを使用してハッシュ値を生成するには、Messaged Gigestクラスを通じて実裝できます。 1. MD5やSHA-256などの指定されたアルゴリズムのインスタンスを取得します。 2。.update()メソッドを呼び出して、暗號化されるデータを渡します。 3. .digest()メソッドを呼び出して、ハッシュバイト配列を取得します。 4.バイト配列を読み取りのために16進(jìn)列に変換します。大きなファイルなどの入力については、チャンクで読み取り、.update()を複數(shù)回呼び出します。セキュリティを確保するために、MD5またはSHA-1の代わりにSHA-256を使用することをお?jiǎng)幛幛筏蓼埂?/p>

Javaでブロックチェーンアプリケーションの開発 Javaでブロックチェーンアプリケーションの開発 Jul 30, 2025 am 12:43 AM

ブロック、ハッシュ、チェーン構(gòu)造、コンセンサスメカニズム、不変性など、ブロックチェーンのコアコンポーネントを理解します。 2.データ、タイムスタンプ、以前のハッシュおよびノンセを含むブロッククラスを作成し、SHA-256ハッシュ計(jì)算と作業(yè)採掘の証明を?qū)g裝します。 3.ブロックリストを管理するためのブロックチェーンクラスを作成し、Genesisブロックの初期化、新しいブロックを追加し、チェーンの整合性を確認(rèn)します。 4.メインテストブロックチェーンを書き込み、トランザクションデータブロックを順番に追加し、チェーンステータスを出力します。 5.オプションの拡張機(jī)能には、トランザクションサポート、P2Pネットワーク、デジタル署名、RESTAPI、およびデータの永続性が含まれます。 6.プロダクションレベルのオープニングには、Hyperledgerfabric、Web3J、CordaなどのJavaブロックチェーンライブラリを使用できます

Pythonプロパティデコレーターの例 Pythonプロパティデコレーターの例 Jul 30, 2025 am 02:17 AM

@Propertyデコレーターは、メソッドをプロパティに変換して、プロパティの読み取り、設(shè)定、削除制御を?qū)g裝するために使用されます。 1?;镜膜适褂梅ǎ篅propertyを介して読み取り専用屬性を定義します。これは、半徑に基づいて直接アクセスされた領(lǐng)域などです。 2。高度な使用法: @name.setterおよび @name.deleterを使用して、屬性の割り當(dāng)て検証と削除操作を?qū)g裝します。 3.実用的なアプリケーション:バランスが負(fù)でないことを確認(rèn)するために、BankAccountなどのセッターでデータ検証を?qū)g行します。 4.命名仕様:內(nèi)部変數(shù)はプレフィックスされ、プロパティメソッド名は屬性と一致し、統(tǒng)一されたアクセス制御はコードセキュリティと保守性を向上させるために使用されます。

CSSダークモードのトグル例 CSSダークモードのトグル例 Jul 30, 2025 am 05:28 AM

まず、JavaScriptを使用して、ユーザーシステムの設(shè)定とローカルに保存されたテーマ設(shè)定を取得し、ページテーマを初期化します。 1. HTML構(gòu)造には、トピックの切り替えをトリガーするボタンが含まれています。 2。CSSの使用:rootは明るいテーマ変數(shù)を定義し、.dark-modeクラスは暗いテーマ変數(shù)を定義し、これらの変數(shù)をvar()を介して適用します。 3. JavaScript検出は、カラーのスchemeを好み、LocalStorageを読み取り、最初のテーマを決定します。 4.ボタンをクリックするときにHTML要素のダークモードクラスを切り替え、現(xiàn)在の狀態(tài)をLocalStorageに保存します。 5.すべての色の変更には、ユーザーを強(qiáng)化するために0.3秒の移行アニメーションが伴います

CSSドロップダウンメニューの例 CSSドロップダウンメニューの例 Jul 30, 2025 am 05:36 AM

はい、一般的なCSSドロップダウンメニューは、JavaScriptなしで純粋なHTMLおよびCSSを介して実裝できます。 1.ネストされたULとLIを使用して、メニュー構(gòu)造を構(gòu)築します。 2。:Hover Pseudo-Classを使用して、プルダウンコンテンツのディスプレイと非表示を制御します。 3。位置の設(shè)定:親liの親relative、およびサブメニューは位置を使用して配置されます:Absolute; 4. submenuは表示されます:なし、それは表示されます:ホバリング時(shí)にブロック。 5.マルチレベルのプルダウンは、ネスティングを通じて、移行と組み合わせ、フェードインアニメーションを追加し、メディアクエリを備えたモバイルターミナルに適合させることができます。ソリューション全體はシンプルで、JavaScriptサポートを必要としません。これは大規(guī)模に適しています

PythonはMacアドレスの例を取得します PythonはMacアドレスの例を取得します Jul 30, 2025 am 02:59 AM

UUIDモジュールを使用して、サードパーティライブラリを必要とせずに、プラットフォーム上のマシンの最初のネットワークカードのMACアドレスを取得し、uuid.getNode()を介して標(biāo)準(zhǔn)形式に変換します。 2。サブプロセスを使用して、IPConfigやIfConfigなどのシステムコマンドを呼び出し、複數(shù)のネットワークカード情報(bào)を取得する必要があるシナリオに適したすべてのネットワークカードMACアドレスの定期的な抽出と組み合わせます。 3.サードパーティライブラリgetMacを使用するには、インストール後にget_mac_address()を呼び出して、インターフェイスまたはIPによるクエリをサポートしますが、追加の依存関係が必要です。要約すると、外部ライブラリが不要な場合は、UUIDメソッドが推奨されます。マルチネットワークカード情報(bào)を柔軟に取得する必要がある場合は、サブプロセスソリューションを使用して、依存関係GETMAをインストールできるようにすることができます。

See all articles