1.1 Mockito ライブラリ

今日は高度なテストについて説明します。より具体的には、Mockitoライブラリを使用します。このビジネスから抜け出すことさえ考えないでください。

まず、このライブラリはSpringテストの標準です。これは実際、Java バックエンド開発業界の標準です。

次に、Spring コードのテストを作成する必要があります作成したバックエンドが正常に動作することを理解する唯一の方法は、その API のメソッドを呼び出すことです。そして、テストを使用することは、テストを使用しない場合よりも 10 倍簡単です。あなた自身の目で見てください。

pom.xml次のコードを使用して、Mockito ライブラリを自分のライブラリに追加できます。

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Mockito プロジェクトのソース コード全体はGitHubにあります。

1.2 モックオブジェクト

では、この Mockito とは何ですか?また、なぜそれほど優れているのでしょうか?

開発およびテストの開発のプロセスでは、実際のオブジェクトの代わりに、ある種の「スタブ」をコードに挿入する必要が非常に頻繁にありました。

たとえば、データベースを操作するコードがテストされ、そこで何かが変更されます。各テストの前にこのデータベースの状態が同じであることが望ましいです (そうでない場合、テストは異なります)。そして、これらの状態をすぐにロールバックできるように、ベースをよりシンプルにしておきたいと考えています。

または、たとえば、便利な SMS を送信するコードをテストしているとします。また、ダイレクト メールには、ある種の有料の SMS ゲートウェイを使用しています。理解できない人に何百もの SMS を送信しないように、コードをテストするために仮想ゲートウェイを組み込むとよいでしょう。

または、コードが、テスト サーバーでは単に利用できない他の Web サーバーからのデータを要求しています。または、オンライン決済用のコードを作成し、50 回テストしてから初めて実際の金融チャネルでの使用が許可される場合もあります。

理解できたと思います...仮想オブジェクト、またはスタブ オブジェクトとも呼ばれる、非常に便利なものです。

ここで問題が発生します。Java には静的型付けがあります。ReadDatabaseこれは、オブジェクトへの参照を 型のオブジェクトではなく変数に割り当てるには、からVirtualDatabaseクラスを継承する必要があることを意味します。VirtualDatabaseRealDatabase

RealDatabaseその後、クラスには他の実際のオブジェクトへの参照を保存するプライベート メソッドと変数が多数あり、この方法では通常のスタブを作成できないことがわかります。理論的には良いことですが、実際には行き止まりです。

そしてここで、Java 5 で登場した助けになります(DynamicProxy詳しくはこちらをご覧ください)。これを使用すると、コンパイラが問題なく使用できる仮想オブジェクトを作成できます。

このような仮想オブジェクトはモックと呼ばれます(モック - レイアウトという言葉から)。Mockito ライブラリは、これらのモックを使用した作業を前例のない高みに引き上げることができました。ちなみに、図書館の名前です。

1.3 @ExtendWith アノテーション

Mockito ライブラリは JUnit と連携してうまく機能し、その拡張機能と考えることもできます。

単体テストで Mockito ライブラリを有効にする方法は 2 つあります。最初の方法は、特別な注釈を追加することです。

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

2 番目の方法は、メソッドを呼び出してその動作を有効にすることですopenMocks()

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

ほとんどの場合、最初のオプションが表示されますが、場合によっては 2 番目のオプションがあることを知っておくと便利です。