問題タブ [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.

0 投票する
1 に答える
589 参照

java - Swing 静的メソッドをモックするときの java.lang.VerifyError

PowerMock を使用して の静的メソッドをモックしていますが、JRE は初期化時に独自のパッケージとクラスの整合性をチェックするJOptionPaneため、あまり準拠していないようです。java.lang.VerifyError

私はいくつかの回避策を持っていますが、それらのどれにもあまり満足していません:

  • オブジェクト ラッパーを作成し、必要なメソッド (など)JOptionPaneのインターフェイスを提供して、テスト用にモックまたはスタブを挿入できるようにします。showInputDialogラッパーメソッドをカバーする必要があるため、これは問題を別の場所に移動するだけですが、少なくともそれらはロジックから分離されます。

  • クラス参照の代わりにインスタンスを使用して、JOptionPaneそのメソッドを呼び出します (クラスは最終的なものではないため、インスタンスのモックに問題はないと思います)。欠点は、「インスタンス変数で静的メソッドを呼び出しています」という種類の警告がたくさん表示されることですが、それは代償です。

  • まったくモックしないで、それを処理するために入力イベントを発生させるためにJOptionPane使用します。Robotこれは非常に面倒で、あまり堅牢ではない可能性があります...それに加えて、私は内部ダイアログを使用しており、 、 などを設定するために余分な作業が必要JDesktopPaneですJInternalFrame

他のアイデアや提案はありますか?

ありがとう!

更新:ちなみに、私はインスタンスをモックしようとしましたJOptionPane 、メソッドディスパッチャーがインスタンスを無視して、以前に存在していた静的メソッドを直接選択しているようです(結局のところ、それは理にかなっています)。そのため、2番目のオプションは破棄されます。

0 投票する
3 に答える
772 参照

java - 動的メソッドを置き換える方法はありますか?

2 つのメソッドを持つインターフェースがあるとします。

このインターフェイスは によって実装されMyInterfaceImplます。実装内で、いくつかの結果を取得するためのfirst()呼び出し。second()

first()次のような、 から出てくるものに基づいてから出てくるものをアサートする単体テストを作成したいと思いsecond()ます。

2選択したメソッド (例: first()) へのすべての呼び出しが直接呼び出される (委任されたMyInterfaceImpl) 一方で、他のいくつかのメソッド (例: second()) が対応するモックに置き換えられるように、ライン上でモックを作成する簡単な方法はありますか?

これは実際には静的メソッドの PowerMock で非常に簡単に実行できますが、動的メソッドには同様のものが必要です。

に基づくソリューション

多くのメソッド (多くのボイラープレート) を持つインターフェイスの場合は特に、十分ではありません。real実際には他のモックに依存するため、転送動作が必要です。

このようなものは、自分のクラスではなく、フレームワークによって処理されることを期待しています。これは達成可能ですか?

0 投票する
2 に答える
6213 参照

java - PowerMock: java.lang.IllegalAccessError: java.util.ServiceLoader をモックするときの java.lang.Class

PowerMock を使用したテストでJava ServicesLoader(これは)をモックしようとしていますが、失敗しているようです...final

エラーを再現する最も単純なテスト ケースは次のとおりです。

そして、私が得る例外は次のとおりです。

サービスのフィールドを初期化することと関係があると思いますが、Class<T>よくわかりません。

これを修正したら、静的メソッドServiceLoader.load(Class)をモックして、以前に作成したモックを返すようにしたいので、さらに問題が発生する可能性があります...

それを解決する方法について何か考えはありますか?

0 投票する
1 に答える
1216 参照

testing - PowerMock と PowerMockito を使用した GWT テスト

私はコンストラクタを持っています:

GWTTestCase を作成しないために、PowerMock または PowerMockito (Mockito) で MFactory.getView() 静的メソッドをスタブするにはどうすればよいですか?

ありがとう!

0 投票する
1 に答える
2634 参照

java - これは Mockito で可能ですか: when(SomeClass.getIntance()).thenReturn(myMock)?

新しいハンドラーを実装する必要があるレガシーコードを使用しています。そして、このハンドラーには、次のように、ハードコードされたプロパティ ファイルを使用してフレームワークによって残念ながら初期化されるオブジェクトがあります。

}
}

問題:
ではUtil()、常に固定の場所から構成ファイルをロードしているため、単体テストのクラスパスに「myConfig.cfg」がないため、単体テストを実行すると常に NPE がスローされます。

1 つの回避策は、ビジネス ロジックを別のメソッドに抽出し、Util オブジェクトを渡して、テスト中にモック オブジェクトを渡すことができるようにすることです。

私の質問は:
doHandle() メソッドを追加せずに、この問題を回避する他の方法はありますか? Mockito を使用して次のコードを試しました。

Util.getInstance() は myUtil に置き換えられませんでした。

何かご意見は?

更新: Util.getInstance() がレガシー コード ベースのあらゆる場所で呼び出されていることがわかったため、少し面倒です。そのため、新しいコードにモック化された Util がある場合でも (以下で Stas が説明したように)、別の場所で Util.getInstance() が呼び出されると問題が発生します。
明らかに、Util.getInstance() を呼び出すレガシー コードのすべてのクラスに新しいコンストラクタを追加することはできませんでした。


これが、「 Mockitoでwhen(Sth.getInstance()).thenReturn(myMock) のようなものを使用できるかどうか」を尋ねている理由です 。
もう問題を起こさないでください。
うーん....何か考えはありますか?

****************************************************** *********************
解決策 : 私の場合の解決策はPowerMockだと思います

0 投票する
2 に答える
16465 参照

java - Mockito/PowerMock:SUTでモックされた静的変数をリセットする方法は?

レガシー コード ベースに単体テストを導入するのは嫌いですが、導入する必要があります。
これまで、Mockito と PowerMock を使用して、従来のコード ベースに単体テストを導入することに成功しました。この状況に遭遇するまで、完全にうまく機能しました:

SUT には、いくつかの静的変数があります (PowerMock を使用してモックし、静的メソッドをモックし、コンストラクターをモックしました)。
最初のテスト メソッドでは、すべてが正常に機能し、モックされた静的変数が期待される出力値を返しました。
しかし、後続のテスト メソッドでは、テストの前に reset() を呼び出しましたが、モック化された静的オブジェクトは常に最初のテストで設定された値を返します。



SUT のコンストラクターは、静的な c1 が null の場合にのみ c1 と c2 をインスタンス化するため、それら (c1、c2) はサブシーケンス呼び出しで再インスタンス化されません。私が理解していないのは、リセット(c1)、リセット(c2)がtest2で効果がない理由です?

何か案が?

0 投票する
2 に答える
4509 参照

java - JUnit setUpは、1回のテストで2回呼び出され、PowermockexpectNewを台無しにします。

私のテストでは非常に奇妙な動作です。

スタックトレース:

私のセットアップが2回呼び出される理由はありますか?

setUpでモックを作成し、検証後、1回と呼ばれる2回の期待値を取得したため、テストが失敗しました。

powermock 1.4.8、junit 4.4、およびeasymockフレームワークを使用しています

0 投票する
5 に答える
45105 参照

java - PowerMock + Mockito VS Mockito 単独

Mockitoの上にPowerMockを追加すると、正確にはどのような機能が得られますか?

これまでのところ、これらを見つけました:

  • static、final、private メソッドのモック
  • 静的初期化子を削除
  • 依存性注入なしでモックを許可する - これは私にはわかりません。詳しく教えていただけますか?

他に何か追加しますか?数行にまとめていただけますか?

また、PowerMock を使用するときに何かを犠牲にする必要がありますか?

0 投票する
1 に答える
6018 参照

testng - モック最終クラス:powermock + easymock + testng

私はPowerMockを初めて使用し、自分の状況に一致する例を見つけることができません。

複雑なことは何もありません。PowerMock+EasyMockを使用して、TestNGテストの最終クラスをモックしようとしています。

最後のクラスは次のとおりです。

テスト対象のクラスは、最終クラスのインスタンスに委任します。

そして、これがテストクラスです。

しかし、テストを実行すると、MyFinalClassがインターフェイスではないことを訴える不正な引数例外が発生します。

私は何が欠けていますか?よろしくお願いします!!!

0 投票する
1 に答える
114 参照

junit - 「スタブ」を正しく使用する

クラス内の他のいくつかのメソッドを呼び出すメソッドをテストしようとしています。他のメソッドをスタブアウトして、実行されないようにしたいと思います。「スタブ」を使うだけの簡単なことだと思っていました。例えば:

しかし、これは機能していないようです。基本的にノーオペレーションであると予想していたときに、「bar」メソッド内で終了しています。間違って使用していますか?

ありがとう。