2012-01-12 11 views

答えて

6

単体テストのプライベートメソッドをテストするとちょっと間違って聞こえます。パブリックメソッドとプロテクトメソッドは、単体テストの候補です。プライベートメソッドをテストするだけで、メソッドをパブリックにするか、プライベートメソッドを呼び出すパブリックメソッドのテストをさらに作成し、プライベートメソッドのコア機能をテストできます。

+1

私はrfsk2010に同意します。パブリックメソッドを使ってすべてをテストすることが多すぎると分かった場合、クラスが大きすぎて仕事が多すぎるという匂いがするかもしれません。その時点で、コードを単一の責任を持つクラスに分けることができます。多くの場合、これらのクラスは復習可能であり、ユニットテストを分離するのがはるかに容易です。 @downvoter。 – Scott

+0

あなたのdownvoteの理由を説明してください – rfsk2010

+1

それはまた、内部のメソッドをテストすることができればいいです。契約によるプログラミングではあなたの権利が得られますが、プログラミングは分割とコンキュータにも基づいているため、プライベートまたは保護されたメソッドをテストしたくない理由はありません。あなたが与えた理由はあまりにも限られており、開発者によって表現されたすべてのニーズに対処していないため、私は下降しました。 – Snicolas

1

こんにちは、blog article about this topicを投稿し、JavaパッケージとAndroidManifest "パッケージ"の違いを理解することで内部メソッドをテストする方法を示します。

あなたはJavaで伝統的にやっているのと同じトリックを使います:テストするメソッドを保護しましょう。

私はそれが助けてくれることを願っています!

2

1年後、プライベートメソッドとフィールドのテストに役立つライブラリもプッシュしました。私は、アンドロイド上ではプライベートメソッドをテストする必要があると考えています。

他のクラスがアクセスできると思うのを防ぐために、あなたのアクティビティのメソッドを非公開にしたいと思います(フラグメント化することはできますが、それは間違った習慣ですから、オブザーバブルオブザーバーパターンを使用する方が良いです)。そうすれば、テストだけでアクセスする必要のあるプライベートフィールドとメソッドが完成します。

BoundBox正確にそうです!ここでは以下のことをテストするための活動の2つのprivateフィールドにアクセスするテストの例です:テストフレームワークからプライベートメソッドをテストするための

@UiThreadTest 
public void testCompute() { 
    // given 
    boundBoxOfMainActivity = new BoundBoxOfMainActivity(getActivity()); 

    // when 
    boundBoxOfMainActivity.boundBox_getButtonMain().performClick(); 

    // then 
    assertEquals("42", boundBoxOfMainActivity.boundBox_getTextViewMain().getText()); 
} 
+0

のように、テストフレームワークで同じメソッドが表示されます。ありがとうございますSnicolas、BoundBoxを見てみましょう – Sachchidanand

2

ベスト、適切な法的な方法は、その方法を超える注釈を@VisibleForTesting ですパブリックメソッドのようにテストフレームワークでも同じメソッドが表示されます。 はこちらOfficial link for VisibleForTesting annotation

+0

これはクリーナーのようですテストの限界のために実際のシステムを変更することはありません。それを試してみませんでしたが、なぜ多くの他の人がこの答えを与えたのだろうかと疑問に思っています – rgv

+0

プライベートメソッドをテストするのにきれいな方法です。試してみる。ありがとう:) – Sachchidanand

関連する問題