問題タブ [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 - PowerMock: 静的メソッドのモック (+ 特定のメソッドで元の値を返す)
PowerMock 1.4.7 と JUnit 4.8.2 を使用しています
いくつかの静的メソッドのみをモックする必要があり、他の (同じクラスの) メソッドは元の値を返すだけです。すべての静的メソッドをモックしてmockStatic
呼び出さないとwhen().doReturn()
、デフォルトが返されます-オブジェクトを返す場合はnull、ブール値を返す場合はfalseなど...など。だから私は
thenCallRealMethod
デフォルトの実装を返すために各静的メソッドで明示的に使用しようとします(モッキングなし/偽物なしを意味します)が、可能なすべての引数のバリエーションでそれを呼び出す方法がわかりません(=すべての可能な入力呼び出し元のメソッドが必要です)。私は具体的な引数のバリエーションをあざける方法しか知りません。
java - PowerMock を使用した静的メソッドと動的メソッドの両方のモック
私たちが持っているとしましょう
私がやりたいことは、単体テストでそれをモックすることです。クラスの静的メソッドと動的メソッドの両方をモックする必要がありますFoo
。モッキングgetInstance()
は簡単です
問題は、メソッドをモックbar
する方法です。
replace(method(...)).with(method(...))
動的メソッド用に設計されていないため、前のトリックは機能しません。
すでにモックされたクラスの上にモックしようとしても機能しません。
上記のコードは をスローしAssertionError: Unexpected method call bar
ます。
では、どうすれば両方を行うことができますか?現実の世界では、静的メソッド内からは利用できないデータが必要なので、モッキングを.bar(...)
入れたくありません。getMockInstance
getMockInstance
java - ネイティブ メソッドを呼び出すコードのテスト
私はこのようなクラスを持っています:
getBar()は JNI で実装され、クラスはfinalであることに注意してください。toString()メソッドをテストする JUnit テストを作成したいと考えています。このためには、getBar()メソッドをモックしてから、元のtoString()メソッドを実行して出力を確認する必要があります。
最初はこれは不可能だろうと思っていましたが、機能リストに従って最終クラスとネイティブ メソッドのテストをサポートするPowerMockを見つけました。しかし、これまでのところ、私はそれで成功していません。私が管理した最善のことは、完全なクラスをモックすることでしたが、テストでは、あまり意味のない実際のメソッドではなく、モックされたtoString()メソッドをテストしました。
では、PowerMock を使用して上記のtoString()メソッドをテストするにはどうすればよいでしょうか? 私は Mockito でPowerMockを使用することを好みますが、これが不可能な場合は、代わりにEasyMockを使用しても問題ありません。
java - クラスを取るコンストラクタでオブジェクトをモックする方法は?
これはテストです:
これらはクラスです:
これはエラーです:
ここで質問があります: PowerMock にどのコンストラクターを探すべきかを理解させるにはどうすればよいでしょうか?
問題のある行はsuppress
. それがエラーの原因です。
java - PowerMock / EasyMock の基本的な問題について助けが必要
私は PowerMock / EasyMock の世界に比較的慣れていないので、比較的簡単だと思っていたことがうまくいきません。おそらく、誰かが私が間違っている場所を教えてくれるでしょう。
次の 2 つのクラスを検討してください。
ここで、テスト クラスで、Bar メソッドの doSomething をテストします。私が抱えている問題は、Foo の使用です。ご覧のとおり、Foo に 0 を渡すと、ゼロ除算エラーが発生します。これが起こらないように、 Foo.doStuff() をスタブ化/抑制したいと思います。本当に必要なのは、doStuff() が実際に呼び出されるようにすることだけです。だから、私はこれをやった:
これを実行すると、ゼロ除算の例外が発生します。expect() 呼び出しを使用し、戻り値 1 を指定すると、メソッドが実行されなくなると考えていました。これは明らかにそうではありません。最初の質問は、なぜですか?
それで、上でコメントアウトされているステートメントを実行してみました。つまり、expect() 呼び出しをコメントアウトし、他の 2 つのステートメントを使用して、メソッドの実行を抑制しなければならないと考えました。私は、suppress() ステートメントを実行しないと、常にゼロ除算の例外が発生することがわかりました。ただし、そこに抑制ステートメントを入れると、doStuff が 1 回呼び出されると予想され、実際の呼び出しは 0 だったという assertionerror が表示されます。
では、なぜメソッドは実行済みとしてカウントされないのでしょうか?
メソッドを「スタブ」するためのモックを取得して、実際には何も実行されていないと見なされるようにするにはどうすればよいですか?
私が扱ってきた状況では、実際には doStuff で void が返されます。戻り値のないメソッドを処理するメソッドと、返すメソッドを処理するメソッドでは、必要なモック ステートメントがどのように異なるのでしょうか?
私はこの仕事をする寸前にいるようですが、ここで試みられているステートメントのある種の間違った組み合わせがあるように感じます. 私はこれに頭を悩ませ、たくさんの例を読みましたが、まだ不足しています。
何か助けはありますか?
ありがとう、
クレイグ
java - PowerMock、mockito、静的メソッドの検証
私はPowerMockをmockitoで動作させようとしています.http://code.google.com/p/powermock/wiki/MockitoUsage13のドキュメントに従っています.
少し単純化するために、静的メソッドがあるとしましょう。
そして、テストされるクラスは次のようなことを行います:
私の単体テストでは、 StaticObj.put が K と X が空白でも null でもないときに呼び出されることを確認したいので、次のようにします。
これは機能し、それは私が期待するものです。うまくいかないのは、K の検証をコメントアウトすると、X の検証が失敗することです! エラー メッセージは、("x1", "x") が予期されていたが、("k1", "k") を取得したことを示しています。どうしてこれなの?これを正しくコーディングしていませんか?
また、合格する次のタイプのテストは、完全に間違った理由で合格する可能性があると私は信じています。
たとえば、powermock が "k1" を見て、"x1" が呼び出されなかったと判断し、パスするかどうかは疑問です。(?)
一般的に言えば、N回呼び出される静的メソッドがあります(Nは入力パラメーターに応じて変化します)。そして、それが正しいケースで呼び出されたことを確認したいと思います(これは入力パラメーターによって決定できます)。私が誤解しない限り、powermock はこれをうまく処理できないようです。
アイデアをありがとう!
java - Powermock使用時のNoClassDefFoundError
テストランナーjunit
を使用してテストケースを実行しています。PowerMock
次のコマンドラインを使用して実行しています。
そうするとき、私はこのエラーを受け取ります:
どうすれば修正できますか?
junit - PowerMock テスト - クラスの静的フィールドの設定
クラスの静的フィールドを設定する方法を見つけるのに苦労しています。基本的には次のようになります。
ここで、B は別のクラスです。
以外にPowerMockでこれを行う方法はありますsetInternalStateFromContext()
か? コンテキスト クラス メソッドを使用すると、1 つのフィールドを設定するのに少しやり過ぎに思えます。
ありがとう。
java - 静的メソッドのモック
いくつかの調査を行ったところ、PowerMock が静的な Java メソッドをモックできることがわかりました。
誰かが (技術的に) PowerMock が JUnit や、できない、またはできない他のものと何が違うのか説明できますか? また、モックしようとしたときに静的メソッドが問題を引き起こしているのはなぜですか?
ありがとう
java - EasyMock / PowerMock インポートに関する質問
よくわからない問題がいくつか発生しています.PowerMockでモックが作成された場合、verify()との非互換性の問題を示唆しているサイトが見つかりました.
モックを作成する行を入力すると、Eclipse はメソッドがあいまいであると通知し、結局 EasyMock.createMock または PowerMock.createMock として指定する必要があります。
私はもともと EasyMock から始めたばかりで、その後 PowerMock に切り替えました。import ステートメントの順序は重要ですか? PowerMock を使用している場合、特定の EasyMock のものを含めないことが重要ですか?
これが私が持っているものです:
そこに若干の冗長性があるかもしれません。競合は可能ですか?そして、曖昧さをなくすために順序は重要ですか?
ありがとう。
クレイグ