問題タブ [powermock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Power Mock - 最終クラスをモックするときのアサーション エラー
Power Mock を使用して特定のシナリオをモックしようとしていました。
以下のテスト メソッドでアサーション エラーが発生しています - returnSevenTest()
。
テストするクラス
最終クラス
Power Mock+ Easy Mock を使用してクラスの実行をテストする
}
エラーを受け取りました:
java.lang.AssertionError:
Expectation failure on verify:
tutorial.one.TutorialOne(tutorial.one.DependentFinalClass$$EnhancerByCGLIB$$fa2e41a0@5a9de6): expected: 1, actual: 0
at org.powermock.api.easymock.internal.invocationcontrol.NewInvocationControlAssertionError.throwAssertionErrorForNewSubstitutionFailure(NewInvocationControlAssertionError.java:20)
at org.powermock.api.easymock.PowerMock.verifyClass(PowerMock.java:2279)
at org.powermock.api.easymock.PowerMock.verify(PowerMock.java:1646)
at org.powermock.api.easymock.PowerMock.verifyAll(PowerMock.java:1586)
at tutorial.one.TutorialOneTests.returnSevenTest(TutorialOneTests.java:174)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
どんな助けでも大歓迎です!! ありがとう
java - MockitoとPowermockにエラーを正しくスローさせる
私は次のコードを持っています
最初のテストは正常に合格し、2番目のテストは失敗してテストエラーが発生します
失敗、予想:<[テスト例外]>が:<[ここにverify(mock)のメソッド呼び出しがありません:-> org.powermock.api.mockito.internal.invocationcontrol.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)正しい検証の例:verify(mock).doSomething()また、final / private / equals()/ hashCode()メソッドのいずれかを検証すると、このエラーが表示される場合があります。これらのメソッドをスタブ/検証することはできません。]>
これを修正する方法について何かアイデアはありますか?私が考えることができるすべてを試しました。
ありがとう
ポール
java - Powermock でクラスのコンストラクターをモックすると、ExceptionInInitializerError が発生しました。修正方法は?
これが私の場合です。AbstractController クラスがあります。サブクラス Controller があります。AbstractController のメソッドの 1 つで、新しい ApplicationLock がインスタンス化されます。Controller の ut を記述するときに ApplicationLock をモックしたいと思います。以下のようなテストケースを書きました。
テスト クラスに必要な注釈を追加しました。
@RunWith(PowerMockRunner.class)
@PrepareForTest({AbstractController.class})
しかし、このテスト ケースを実行すると、次のエラーが発生しました。これは、AbstractController の静的初期化子です。
原因: java.lang.NullPointerException at com.acompany.controller.common.AbstractController.(AbstractController.java:65)
完全なスタック トレースは次のとおりです。
javassist.runtime.Desc.getClassObject(Desc.java:44) の java.lang.Class.forName(Class.java:169) の java.lang.Class.forName0(ネイティブ メソッド) で java.lang.ExceptionInInitializerError。 javassist.runtime.Desc.getType(Desc.java:123) の runtime.Desc.getClassType(Desc.java:153) com.acompany.controller.portfolio の javassist.runtime.Desc.getType(Desc.java:79) .ControllerTest.testIncrementalFail(ControllerTest.java:195) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) :25) org.powermock で org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66) で java.lang.reflect.Method.invoke(Method.java:597) で。modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:307) org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86) at org.junit.internal.runners.MethodRoadie org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294) の .runBeforesThenTestThenAfters(MethodRoadie.java:94) .executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73) org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) で org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84) で org.junit org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) の .internal.runners.MethodRoadie.run(MethodRoadie.java:49) org.powermock.modules.junit4.internal.impl の.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.ジャバ:34) org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118) で org.powermock.modules で org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) で.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102) at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) at org.eclipse.jdt .internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit .runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) で org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) で原因: java.lang.NullPointerException at com.acompany.controller.common.AbstractController.(AbstractController.java:65) ... 35 詳細
java - PowerMockito.whenNew()の動作をリセットするには?
これは私がやっていることです:
メソッドが見つかりませんPowerMockito.reset()
..回避策は何ですか?
java - PowerMock(ito) を使用して Thread コンストラクターに渡された Runnable インスタンスへの参照を取得する方法は?
のインスタンスを引数としてThread
受け入れるコンストラクターを使用してを作成するブラック ボックス クラスがあります。Runnable
Task
コンストラクター呼び出しをインターセプトし、渡された実装への参照を取得したいと考えていますRunnable
。これまでのコードは次のとおりです。
テストを実行すると、次のように出力されます。
コンストラクターによって返されたすべてのRunnable
オブジェクトまたはオブジェクトへの参照を取得する方法はありますか? Thread
現在の (メイン) スレッドで非同期コードを実行するか、作成されたスレッドに参加してアサーションを実行したいと考えています。
java - PowerMock を使用してテストするためのプライベート メソッドをモックする方法は?
プライベート メソッドを呼び出すパブリック メソッドでテストしたいクラスがあります。プライベート メソッドが正しく機能すると仮定したいと思います。たとえば、次のようなものが欲しいですdoReturn....when...
。PowerMock を使用して可能な解決策があることがわかりましたが、この解決策はうまくいきません。どのようにそれを行うことができますか? 誰かがこの問題を抱えていましたか?
android - ClassNotFoundException による Android + Powermock + Mockito + Maven ビルド エラー
mavenを使用してpowermockとmockitoで奇妙なビルドの問題に直面しています。ecplise を使用して (maven を使用せずに) テストを完全に実行できます。しかし、cli またはビルド サーバーで maven を使用してテストを実行しようとすると、次の例外が発生します。
エラーのテスト: テストメカニズム: java.lang.ClassNotFoundException: org.mockito.internal.progres s.ThreadSafeMockingProgress
私の単体テストは次のようになります。
私の pom.xml は次のようになります。
CLI からビルドすると、次のエラーが発生します。
このエラーが発生する理由を知っている人はいますか? 助けていただければ幸いです...
java - PowerMockでプライベートメソッドをモックしましたが、基になるメソッドは引き続き呼び出されます
JNDI呼び出しを行うプライベートメソッドをモックアウトしようとしています。そのメソッドが単体テストから呼び出されると、例外がスローされます^。テスト目的でそのメソッドをモックアウトしたいと思います。別の質問の回答のサンプルコードを使用しましたが、テストに合格しても、基になるメソッドが呼び出されているようです。メソッドにを挿入するSystem.err.println()
とdoTheGamble()
、コンソールに出力されます。
興味深いことに、最初にコメントアウトするassertThat
と、テストに合格します。?:(
では、プライベートメソッドが呼び出されないように、どのようにモックアウトするのですか?
^当然のことながら、私のワークスペースはJNDIをサポートしていないため、実稼働環境のみがサポートしています。
%すべてのライブラリの最新バージョンであるJUnit 4.10、Mockito 1.8.5、Hamcrest 1.1、Javassist 3.15.0、およびPowerMock1.4.10を使用しています。
java - Mockito スパイは、実際のメソッド呼び出しとは異なる結果を返します
次のコードがあります。
このメソッドの単体テストを書いています。VTDGen
メソッドをモックせずにメソッドを実行すると、parseFile
が返されますtrue
。ただし、スパイでモックすると、 が返されますfalse
。
私のテストは次のとおりです。
私は、Mockito のスパイ オブジェクトがラップされたオブジェクトの動作を変更するべきではないという印象を受けていました。
java - powermockを使用してJavaのシングルトンコンストラクターを抑制します
コンストラクターが単体テスト環境では実行できない(実行すべきではない)いくつかのことを実行するシングルトンクラスを使用するいくつかのクラスを単体テストしようとしています。私の理想的なシナリオは、コンストラクターが完全に抑制されてから、テストクラスが呼び出す他のメンバーメソッドをスタブ化することです。私の問題は、コンストラクターを抑制できないように見えることです。
これを解決する方法についての私の理解は、次のようになります。
残念ながら、createMockの呼び出し中に、MySingletonコンストラクターがヒットし、それでもスーパーコンストラクターが呼び出されます。
私は愚かなことをしていますか?これをほぼ正確に実行している例をWebで見つけましたが、非推奨のsuppressConstructorメソッドを使用していました。非推奨にもかかわらず、私もそれを試しましたが、役に立ちませんでした...
私がやろうとしていることは可能ですか?もしそうなら、私は何を間違っていますか?
*編集バージョンが機能するようになりました。