モックプライベートメソッド
それは、この見つけることは難しいことではありませんが、実際には、私たちのほとんどが反射によりユニットテストを完了するために行くが、実際にされ、クラスのプライベートメソッドを学んでプライベートメソッドを模擬することがあるので、個人は、テストにリフレクションを使用することをお勧めしません。ユニットテストメソッドがカバーされるとき、そのちょうどあなたの例を与えてみましょう、模擬テストのプライベートメソッドをシミュレートするために使用されます。
シミュレーションのシナリオ
私たちは、学生があるかどうかを見つけるために、名前に従うと仮定し、ISEXIST()は 1を返し、それが存在する場合は、このプライベートルックアップメソッドを呼び出すと、クラスの生徒数を返しながら、true、そうでない場合はfalseを返すがあれば、ノーリターンがありません0
ビジネスロジックのコードは次のような単純な、特定のコードです:
パッケージcom.rongrong.powermock.mockprivate。 / ** * @author rongrong * @version 1.0 * @description: * @date 2019年12月5日夜9時48分 * / パブリック クラスStudentPrivateService { パブリック ブールisExist(文字列のuserName){ int型のカウント= checkExist(ユーザー名); もし(数> 0 ){ 返す 真。 } 他{ スロー 新しい(NullPointerExceptionが)。 } } プライベート int型checkExist(文字列usernameは){ スロー 新しいUnsupportedOperationExceptionが(); } }
その後、我々は記事で学んだ答え、スパイメソッドを使用してテストpowermockを試験します。
具体的なコードは次のよう:
パッケージcom.rongrong.powermock.mockprivate。 輸入org.junit.Test; 輸入org.junit.runner.RunWith; 輸入org.mockito.invocation.InvocationOnMock。 輸入org.mockito.stubbing.Answer; 輸入org.powermock.api.mockito.PowerMockito; 輸入org.powermock.core.classloader.annotations.PrepareForTest; 輸入org.powermock.modules.junit4.PowerMockRunner; 輸入 静的junit.framework.TestCase.assertTrue。 / ** * @author rongrong * @version 1.0 * @description: * @date 2019年12月5日21時54 * / @RunWith(PowerMockRunner。クラス) @PrepareForTest(StudentPrivateService。クラス) パブリック クラスTestStudentPrivateService { @Test 公共 ボイドtestStudentPrivateService(){ StudentPrivateService studentPrivateService = PowerMockito.spy(新しいStudentPrivateService())。 してみてください{ PowerMockito.doAnswer(新しい回答<整数> (){ @Overrideは 、パブリック整数の回答(InvocationOnMock呼び出し)はスローのThrowable { String型の引数を=(文字列)invocation.getArguments()[0 ]; もし( "rongrong" .equals(引数)){ 返す 1 。 } 他{ 戻り 0 ; } } })と(studentPrivateService、。 "checkExist"、 "rongrong" )。 ブールが存在= studentPrivateService.isExist( "rongrong" )。 いるassertTrue(が存在)。 PowerMockito.verifyPrivate(studentPrivateService).invoke( "checkExist"、 "rongrong" ); キャッチ(例外e){ e.printStackTrace(); } } }
この全体のpowermock学習が完了した、と言っている、予想以上に強力なマルチpowermock。