web-dev-qa-db-ja.com

純粋なJUnitテストにVisibleForTestingを使用する方法

私は純粋なJUnit4を実行していますJava自分のプロジェクトのJava Javaファイルをテストしていますが、使用する方法が見つかりません @ VisibleForTesting 手動で公開することなく、明らかに。

例:

@VisibleForTesting
public Address getAddress() {
  return mAddress;
}

メソッドをpublicにして、テストに対して「公開」する必要がありますが、その場合、注釈は正しくありませんか?注釈が何もしない場合は、なぜコメントを使用しないのですか?

21

Android docsによると:

オプションで、テスト用でない場合の可視性を指定できます。これにより、ツールは本番コード内から意図しないアクセスをキャッチできます。

例:

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)public Address getAddress()

22
Rodrigo Borba

メソッドをpackage-privateにすると、テストが対応するテストパッケージ(製品コードと同じパッケージ名)にある場合、テストはそれを見ることができます。

@VisibleForTesting
Address getAddress() {
  return mAddress;
}

また、プライベートメソッドを明示的にテストする必要がないようにコードをリファクタリングすることも検討してください。パブリックインターフェイスの動作をテストしてみてください。テストが難しいコードは、製品コードを改善できることを示している可能性があります。

注釈の要点は、その規約であり、静的コード分析で使用できるのに対し、コメントは使用できないということです。

40
MikeJ

@VisibleForTestingアノテーションはGuavaのパッケージメソッドで使用され、JUnit APIの一部ではありません。アノテーションは、メソッドをテストできることを示す単なるタグです。 JVMにもロードされません。

2