Mockito を使用していくつかのことを確認したいのですが、ドキュメントを調べたところ、通常の Mockito ツールの外に出ないとできないことがわかりました。例としてこれを取ります:
DrawTool tool = mock(DrawTool.class);
new Drawer().draw(tool);
verify(tool).begin(); // Make sure begin and end are called exactly once each
verify(tool).end();
InOrder inOrder = inOrder(tool);
inOrder.verify(tool).begin();
inOrder.verify(tool).end();
inOrder.verify(tool).flush();
inOrder.verifyNoMoreInteractions();
このテストは、それが最後のインタラクションであることの検証など、いくつかのことをうまく検証しflush
ますが、Mockito にはそれbegin
が最初のインタラクションであることを検証する方法がないようです。Mockito のツールの非対称性に驚いたので、カスタム VerificationModes を作成する可能性を調査しています。次のような VerificationMode を作成し、次のようbeforeAnyOther
に使用したいと思います。
inOrder.verify(tool, beforeAnyOther()).begin();
inOrder.verify(tool).end();
inOrder.verify(tool, beforeAnyOther()).flush();
inOrder.verifyNoMoreInteractions();
begin
その意図は、 が最初に呼び出され、 と の間に関連する相互作用がないこと、end
および とのflush
間の相互作用が未指定であることを確認することです。begin
end
私は既存の VerificationModes のソースコードを研究しており、原則としてこれは実装する単純な VerificationMode であるべきだと思われますが、Mockito のいくつかの主要なクラスを超えると、ドキュメントは非常に薄くなり、まるで私に教えようとしているかのようになります。これらのクラスに触れてはいけません。org.mockito.internal
このような名前は、これらのクラスがパブリックであっても変更される可能性があることを示唆しているため、開始するパッケージには特に注意しています。
VerificationMode を実装するための本当に重要なクラスはすべてorg.mockito.internal.verification.api
パッケージに含まれているようです。そのパッケージ全体には、javadoc が 1 ビットしか含まれていないようで、「検証 API が完全に終了したら、このパッケージを公開する必要があります」と書かれています。それは、このパッケージが積極的に変更されているということなので、含まれているものは何も使用すべきではないということですか? それとも、何年にもわたって言われてきたことであり、パッケージが実際に変更されることはおそらくないのでしょうか?
クラスを使用できない場合、org.mockito.internal.verification.api
カスタム VerificationModes を実装することは不可能のようです。カスタム VerificationModes なしでこのようなことを行う方法はありますか?