問題タブ [powermockito]
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.
powermock - PowerMock は最終クラスをモックできますが、PowerMockito はできません
モックする必要がある最終クラスがあるため、PowerMock を使用しました。EasyMock スタイルの構文が読めないので、PowerMockito を使用しようとしています。
つまり、PowerMock ランナーを使用できませんが、ルールが整っているので、問題は解決しました。はい、Groovy モックを試してみましたが、Java の最終クラスを処理できません。
作業バージョンのスケッチは次のとおりです。
このバージョンは、Web 上の例から複製したもので、次のような効果があります。
実行時に次の例外が発生します。
この上に私の髪を引き裂く。あなたが助けることができればありがとう!
更新: JUnitでこれを試しましたが、同じ問題です。
java - インターフェイスで静的メソッドをモックするために PowerMockito を取得しますか?
テスト用にモックしようとしているライブラリがあります...次のような静的メソッド実装を備えたJava 8インターフェースがあります。
そして、私はその戻り値をモックしようとしています:
しかし、デバッガーでテストを実行すると、モック インスタンスが返されません。
静的モックのさまざまな順列を試しましたが、静的メソッドがモック値を返すことができません。何かご意見は?
java - Mockito を使用してオーバーロードされたメソッドの呼び出し回数を確認するにはどうすればよいですか?
Mockitoを使用して呼び出されたかどうかを確認するにはどうすればよいですか - MCVEクラスが与えられた場合、実際に後で呼び出さbar(Alpha, Baz)
ずに:bar(Xray, Baz)
Foo
現在、おおよそ次の Mockito 拡張 JUnit テストがあります。
そしてそれは失敗します:
any(Class.class)
は何にでも一致し、型チェックを行わないためだと思います...したがって、Mockito の観点からは、実際には inと in (12 行目)のbar()
2 回呼び出しています。Foo
FooTest
テストで実際にやりたいことを実行するにはどうすればよいですか:bar(Xray, Baz)
呼び出し時にbar(Alpha, baz)
(同時に への呼び出しをインターセプトしながらbar(Xray, Baz)
) が呼び出されたことを確認しますか?
eq()
Matcher ( )を使用するwhen(stub.bar(eq(Xray.class), any(Baz.class))...
とコンパイル エラーが発生しますが、Cannot resolve method 'bar(Class<Xray>, Baz)'
とにかくそのように使用するべきではありません (eq(xray)
おそらくもっと似ているでしょう)...
また、関連するメモとして、 のオーバーロードを作成しようとするとbar(Alpha, Baz)
private
、次のようなコンパイル エラーが発生しますFooTest
。
エラー:(10, 12) java: bar(Xray,Baz) は Foo にプライベート アクセスを持っています
PowerMockito を使用して回避する方法はありますか? どのように?(明らかに、私は呼び出しを数えたいだけですbar(Xray, Baz)
- のすべてのオーバーロードへのすべての呼び出しを数えることbar()
は問題外です...)
eq(xray)
テストの 10 行目と 14 行目の代わりに を使用するだけでうまくいきますが、オブジェクトである限り、どの(特定の) Xray オブジェクトが の引数として渡されるかについてany(Xray.class)
はあまり興味がありません...bar()
Xray
更新:ディスカッションの「PowerMockito とメソッド」の部分について別の質問を投稿し、これをメソッドで機能させる方法を見つけました。参照。以下の私のコメント。private
public
reflection - メソッド名とリフレクションを使用して検証する方法
オブジェクトのスパイまたはモックがあり、メソッドの呼び出しに問題があることを確認したいのですが、コンパイル時ではなく実行時にメソッド名を受け取ります
私は次のようなことをしたいと思います:
を使用して一種の回避策を作成しました
PowerMockitoを使用するまで問題は機能します:標準メソッドでは機能しますが、メソッドが最終的な場合、メソッドは存在しませんmockingDetails.getInvocations()
(ただしmockingDetails.getInvocations()
、実際に存在しなくてもverify(mock).getGuid()
うまく機能します)
ですから、何かアイデア/アドバイスがあれば嬉しいです
よろしく
java - 戻り値の型が異なる場合、PowerMockito はオーバーロードされたメソッドと一致しません
これは、シリーズのパート 3です...
私は(まだ)PowerMockito(is )を使用してbar(Alpha, Baz)
呼び出されたかどうかを確認しようとしています-実際に後で呼び出すことなく、以下のMCVEクラスを指定します。は何も返さないが、他の 2 つはを返すことに注意してください。bar(Xray, Baz)
bar(Xray, Baz)
private
Foo
bar(Alpha, Baz)
String
ユーザー kswaughsは、すべてのメソッドが同じ戻り値の型を持つ場合に、プライベート オーバーロード メソッドの問題を解決しました。そして、他の場所when()
では、メソッドをオブジェクトで使用することが提案されましたMethod
...しかし、bar(Alpha, Baz)
他のメソッドとは異なる戻り値の型を使用するように定義したので、すべてが再び崩壊します:
すべての美しさの例外:
使っ.withArguments(any(Xray.class), any(Baz.class))
ても変わらないようです。
スポットオンですが、残念ながら例外は、私が持っているセットアップでポイント1を実現する方法を教えてくれません. 何か案は?