@VisibleForTestingは、テスト目的でのみクラスのインターフェイスを変更するため、望ましくないことを理解しています。理想的には、実際に使用するインターフェースをテストする必要があります。しかし、良い選択肢は何でしょうか?
@VisibleForTesting
は、前述のように、エンドユーザーに公開していないコードの一部をテストする場合に使用します。それをテストしたい場合、それはおそらくそれが複雑であるか、少なくとも些細なことではないことを意味します。 2つの解決策は次のとおりです。
物事が複雑になり始めたとき、私は#2が大好きです。外部オブジェクトをテストして、インターフェイスから公開しなくても機能することを確認できるからです。
そうは言っても、動作がメソッドを新しいオブジェクトに抽出することを保証しない場合があり、時間を節約するためだけに@VisibleForTesting
を使用します。経験は、それを行う価値がある(またはしない)時期を教えてくれます。