2013-10-10 24 views
5

私はjunitテストのドキュメントを見ていましたが、テストをパブリックとして定義する必要性を理解することができませんでした。誰かがこれに関する情報を共有できますか?Junitのテストメソッドを公開する必要があるのはなぜですか?

私はhttps://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Test.java

に読んしかし、まだ理由が明確でないです。

では、私は私が

@Test 
private void testAdd(){ } 

答えて

5

として何かを書くことができない理由は、JUnitフレームワークは、あなたのテストクラスの外部からテストメソッドを呼び出すものです。あなたのテストメソッドがプライベートであれば、それを行うことはできません。

+1

他にも、他のユーザーがテストクラスの外部からアクセスしたくないテストメソッドをどのように隠すのですか? – Jagori

+1

@ジャゴリプライベートテストメソッドのユースケースは何ですか?テストメソッドの目的は、JUnitフレームワークによって実行されるため、プライベートなものを使用することはありません。クラスの外部から直接アクセスできないコードが必要な場合は、テストメソッドでプライベート非テストメソッドを記述してテストクラスから呼び出すことができます。 –

+2

通常、テストは公開された成果物には含まれていないため、使用できません。 –

0

あなたtestAddメソッドがプライベートで

@Test 
public void testAdd(){ } 

を試してみてください、それを行うことはできません。

+0

はい、これは私がなぜプライベートとパブリックでないのかを理解したかったのです。私はJUnitフレームワークがテストクラスの外部からテストメソッドを呼び出すので答えを得たと思います。したがってpublicとして定義する必要があります。テストクラス外からアクセスしたくないメソッドをどのように隠すのですか? – Jagori

+0

テストクラスを非表示にする方法を理解しましたか? –

1

JUnitは、リフレクションによってテストメソッドにアクセスします。 SecurityManagerは、プライベートメソッドへのアクセスを制御できます。したがって、JUnitは、フレームワークによってアクセスされるものについては、パブリックメソッドとフィールドのみを使用します。

要するに、プライベートメソッドへのアクセスを許可しないSecurityManagerがアクティブな場合、JUnitはプライベートテストメソッドを実行できません。

+0

私はStefanを謝罪しますが、あなたのこのコメントでは明確ではありません。あなたは、Junitがリフレクションによってテストメソッドにアクセスすることを意味するものを詳しく説明できますか? – Jagori

+0

JUnitは、リフレクションを使用して@Testで注釈が付けられたすべてのメソッドを検索します。 (https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/runners/BlockJUnit4ClassRunner.javaのcomputeTestMethods()を参照してください) –

関連する問題