Javaでは、Mockito&PowerMockitoを使用したシングルテスト
1791 ワード
1.開始
まず単測の意味を説明します:単測は自分のコードロジックが正しいかどうかを検証するためで、それではある同級生が言って、私は直接自分の書く方法を呼び出せばいいのではないでしょうか.サービスの区分に伴い、私たちのコードは異なるサービスに依存し、他のサービスを呼び出さず、mysql、redisなどのデータもあります.テストを走るときにこれらの環境を準備するのは不便です(主に前者で、テスト環境が不安定です)、私たちはMockの方法を使って、私たちが依存しているサードパーティのサービスMockを落とすことができます(つまり、遮蔽して、本当に私たちが依存している環境を呼び出すことはありません).これによって、自分の論理を爽やかにテストすることができます.
MockitoとPowerMockitのmaven座標を導入し、PowerMokitoはMockitoの強化であり、mockitoが完成できないcaseをカバーしている.
2.使用方法
talk is cheap,show my code
直接demo githubリンクを置くhttps://github.com/yangzhenkun/MockDemo
ここでは、重要な
中の例は1つの簡単な方法のmockを覆って、値の方法のmockを返さないで、静的な方法のmock、web controllerのmock
コードには注釈を用いて注入されているが,このbean管理はspring iocとは何の関係もない.
3.jacocoを使用して単一測定オーバーライド率を表示する
主moduleと依存moduleのpomにjacocoのpluginを追加し、具体的にはGITHUBコードを参照することができる.
PS:一般的なバックエンドプロジェクトのweb層は主にmoduleであり、私たちの一部のサブmoduleがweb層で直接引用されなければ、単測報告書を収集することはできません.簡単に言えば、サブmoduleの単一測定オーバーライド率を統計するには、プライマリmoduleが直接参照し、サブmoduleにpluginを追加する必要があります.
プロジェクトにサブmoduleがたくさんある場合、一部のmoduleは直接メインmoduleに参照されていない場合は、単一測定を統計したいすべてのサブmoduleを直接依存させるut moduleを作成することをお勧めします.
ちょくせつうんてん
単測を実行し、単測レポートを生成できます(すべての単測クラスがTestで終了していることに注意してください).
私たちのjavaプロジェクトがマルチモジュール依存である場合、マルチモジュールのexecution(メインmodule pomですでに与えられている)を増やす必要があり、サブmoduleもjacocoのpluginを増やす必要があります.
単一測定が完了すると、/target/site/jacoco、/target/site/jacoco-aggregate/の2つのフォルダが生成されます.前者はメインmodule自体の単一測定で、後者はmoduleに依存する単一測定結果です(複数の依存moduleはこのディレクトリの下にあります).同時にindexz.htmlも表示され、裏面にlines列があれば、行オーバーライド率が表示されます.
まず単測の意味を説明します:単測は自分のコードロジックが正しいかどうかを検証するためで、それではある同級生が言って、私は直接自分の書く方法を呼び出せばいいのではないでしょうか.サービスの区分に伴い、私たちのコードは異なるサービスに依存し、他のサービスを呼び出さず、mysql、redisなどのデータもあります.テストを走るときにこれらの環境を準備するのは不便です(主に前者で、テスト環境が不安定です)、私たちはMockの方法を使って、私たちが依存しているサードパーティのサービスMockを落とすことができます(つまり、遮蔽して、本当に私たちが依存している環境を呼び出すことはありません).これによって、自分の論理を爽やかにテストすることができます.
MockitoとPowerMockitのmaven座標を導入し、PowerMokitoはMockitoの強化であり、mockitoが完成できないcaseをカバーしている.
2.使用方法
talk is cheap,show my code
直接demo githubリンクを置くhttps://github.com/yangzhenkun/MockDemo
ここでは、重要な
@InjectMocks
と@Mock
の2つの注釈について説明する.@InjectMocks
単一測定が必要なクラスにこの注釈を打つ@Mock
は、rpc呼び出し、mysql読み書きなど、mock(シールド)が必要なクラスに注釈を付けます.@Spy
は、自身のオブジェクトインスタンスをトラフィックコードに注入することができる中の例は1つの簡単な方法のmockを覆って、値の方法のmockを返さないで、静的な方法のmock、web controllerのmock
コードには注釈を用いて注入されているが,このbean管理はspring iocとは何の関係もない.
3.jacocoを使用して単一測定オーバーライド率を表示する
主moduleと依存moduleのpomにjacocoのpluginを追加し、具体的にはGITHUBコードを参照することができる.
PS:一般的なバックエンドプロジェクトのweb層は主にmoduleであり、私たちの一部のサブmoduleがweb層で直接引用されなければ、単測報告書を収集することはできません.簡単に言えば、サブmoduleの単一測定オーバーライド率を統計するには、プライマリmoduleが直接参照し、サブmoduleにpluginを追加する必要があります.
プロジェクトにサブmoduleがたくさんある場合、一部のmoduleは直接メインmoduleに参照されていない場合は、単一測定を統計したいすべてのサブmoduleを直接依存させるut moduleを作成することをお勧めします.
ちょくせつうんてん
mvn clean install -DskipTests=false -Dmaven.test.failure.ignore=true
単測を実行し、単測レポートを生成できます(すべての単測クラスがTestで終了していることに注意してください).
私たちのjavaプロジェクトがマルチモジュール依存である場合、マルチモジュールのexecution(メインmodule pomですでに与えられている)を増やす必要があり、サブmoduleもjacocoのpluginを増やす必要があります.
単一測定が完了すると、/target/site/jacoco、/target/site/jacoco-aggregate/の2つのフォルダが生成されます.前者はメインmodule自体の単一測定で、後者はmoduleに依存する単一測定結果です(複数の依存moduleはこのディレクトリの下にあります).同時にindexz.htmlも表示され、裏面にlines列があれば、行オーバーライド率が表示されます.