問題タブ [mockito]
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 - MockitoとJMockitの比較-MockitoがJMockitよりも優れているのはなぜですか?
プロジェクトに使用するモックフレームワークを調査しており、JMockitとMockitoに絞り込んでいます。
MockitoがStackoverflowで「 Javaに最適なモックフレームワーク」に選ばれたことに気付きました。JMockitの「モックツール比較マトリックス」の
機能を比較すると、 JMockitには複数の異なる機能があるように見えます。
JMockitでは達成できないMockitoでできること、またはその逆 について、誰かが特定の情報(意見ではない)を持っていますか?
java - Mockito re-stub メソッドは既に thenthrow でスタブ化されています
私はmockitoで問題に遭遇しました。私はWebアプリケーションを開発しています。私のテストでは、ユーザー管理は嘲笑されています。getLoggedInUser()
メソッドによって返される User を変更しなければならない場合があります。
問題は、私のgetLoggedInUser()
メソッドも . をスローできることAuthenticationException
です。
したがって、ユーザーなしから一部のユーザーに切り替えようとすると、への呼び出し
userProvider.getLoggedInUser()
すでにスタブ化されているため、例外をスローしますthenTrow()
when
例外を気にしないようにメソッドに指示する方法はありますか?
前もって感謝します - István
java - MockitoのverifyメソッドにjUnitAssertメッセージ引数のようなものを含める方法はありますか?
テストコードのスニペットを想定しましょう。
Mockito.verify
モデル内のメソッドがメソッドを呼び出さなかった場合、メソッドは例外をスローしますObservable.setChanged()
。
問題:追加しloggers/System.print.out
ないと、テストに失敗した現在のメソッドが何であるかがわかりません。jUnit Assert
メソッドに似たものを作成する方法はありますか?
解決:
java - Mockitoのデフォルトのスタブ
予期しない値が与えられたときにデフォルト値を返すようにメソッドをスタブするにはどうすればよいですか?
例えば:
パート2:上記と同じですが、例外をスローします:
上記の例では、最後のスタブが優先されるため、マップは常にデフォルトを返します。
java - Mockitoモックオブジェクトに、次に呼び出されたときに別のものを返すように指示するにはどうすればよいですか?
そのため、クラスレベルで静的変数としてモックオブジェクトを作成しています...あるテストでFoo.someMethod()
は特定の値を返し、別のテストでは別の値を返したいと考えています。私が抱えている問題は、これを正しく機能させるためにモックを再構築する必要があるようだということです。モックの再構築を避け、各テストで同じオブジェクトを使用したいと思います。
2番目のテストでは、testObj.bar()が呼び出されたときに値として0を受け取っています...これを解決するための最良の方法は何ですか?各テストで異なるモックを使用できることはわかっていFoo
ますが、複数のリクエストをからチェーンするmockFoo
必要があります。つまり、各テストでチェーンを実行する必要があります。
java - mockitoを使用したユニットテスト(部分的なモック)
Mockitoに問題があります。
そのようなことをすることは可能ですか?
私はMockito1.7を使用しています。
「スパイ」システムがあるのを見ましたが、テストするアイテムにそれを使用することは推奨されていないと言われています(なぜですか?)。
とにかくそのスパイ機能を試しましたが、奇妙な動作をします。
私がやりたいことを確認してください:
実際のコード:
テストコード:
彼らが言ったように、私はスパイで問題になる可能性のあるwhen thenReturn構文を避けました(しかし、それはとにかく機能しません)
奇妙なことに、assertTrue(x.methodB(argument).equals( "good")); 大丈夫です
2番目のassertTrue(x.methodA(argument).equals( "good"));のみ OKではありません
実際、helper.methodA(argument)は「toto」を返します->模擬結果ではなく実際の結果
この場合、mockitoに「good」を返すように指示することはできません??? テストクラスがmethodBを呼び出した場合は問題ないようですが、スパイのメソッドがmethodBを呼び出した場合、それは機能しなくなります...
どうしたらよいかわかりません...同じクラスの2つのメソッドを単体テストし、テストを互いに独立させて、有名な模擬テストフレームワークがこの基本機能を実装しないようにするのは、とても奇妙なことです。 ?それは私たちが単に実際のユニットテストと呼んでいるものではありませんか?テストされたオブジェクトでスパイメソッドを使用しないように彼らが言う理由を理解していない...
ありがとう
java - 引数付きのコンストラクタを持つ抽象クラスをテストする
インターフェイスの 1 つを実装している抽象クラスの 1 つをテストする必要があります。抽象クラスには、引数を持つコンストラクターがあります。テスト フレームワークとして Mockito を使用しています。では、抽象クラスのメソッドを呼び出す必要がある場合、最適なメソッドは何でしょうか?
抽象クラスをサブクラス化しようとすると、引数コンストラクターを実装するように求められ、引数なしのコンストラクターの記述が許可されません。また、引数のないコンストラクターなしでクラスをモックしようとして、sysouts をメソッドに配置すると、通常、それらが呼び出されているのを確認できません (モックされたクラスには、必須の引数なしのコンストラクターが必要ですか?)。
助けてください。前もって感謝します。
java - Mockito は間違った議論について不平を言う
Mockito を使用してアクションの動作を検証しようとします。テストコードはこんな感じ
メソッド actionPerformed には、Type1 のコンストラクターで提供されたオブジェクトに対する someMethod の呼び出しだけが含まれています。しかし、Mockito は、期待されたメソッド呼び出しが行われず、代わりに別のメソッド呼び出しが行われたと不満を漏らしています。しかし、Mockito によって出力された 2 つの呼び出しの文字列表現はまったく同じです!
何が起こっているのか説明はありますか?
更新: Mockito からの ErrorMessage
java - Mockito を使用してスタブ化されたメソッドにパラメーターをキーオフする方法
ご挨拶。
Web アプリでテストするために検索エンジンをモックしています。この検索エンジンは、異なるスキーマを持つ xml ドキュメントを返します。スキーマは、コレクション セットと呼ばれるパラメーターに依存します。コレクション セットに基づいて異なるスキーマを返すことは、モック化が難しい部分です。コレクション セットの指定は、基本的にセットアップ メソッドであり、無効なメソッドであるためです。この検索エンジンは外部の jar ファイルであるため、API を変更することはできません。提供されたもので作業する必要があります。次に例を示します。
次に、ドキュメントごとに、次のように呼び出して xml を取得できます。
モック オブジェクトを使用している場合getDocumentText()
、ジェネレーターによって作成された、スキーマに準拠した xml 文字列を返します。私がやりたいことは、上記の最初のコード スニペットの手順 3 で提供されたコレクション セットに応じて、異なる種類のジェネレータを使用することです。私はこのようなことをしようとしてきました:
しかし、これは多くの赤いハイライトになります:)
基本的に、私の目標はキーをオフにしaddCollectionSet(someCollectionSet)
て、呼び出されたときにパラメーターをオフにして、別のジェネレーターが使用されるようにすることです。どうすればこのようなことを達成できるか知っている人はいますか? または、ジェネレーターを条件付きで接続するために使用できる何らかの形式の依存性注入があるのでしょうか?
ありがとう!
アップデート
エンジンを返さないようにファクトリ オブジェクトを変更しましたが、そのエンジンからの検索オブジェクトと検索オブジェクトを返すようにしました。これで、次のようなことができるようになりました。
Search search = factory.getSearch(collectionSet);
だから私がやりたいことは次のようなものです:
つまり、switch ステートメントで getSearch に渡された文字列をキーオフしたいということです。確かに、以下でフェリックスが提案したようなことをもっと行うこともできますが、すべてのケースをスイッチでラップしたほうがよいでしょう。誰かがこれを行う方法の例を提供できますか? ありがとう!
アップデート
モック呼び出しに渡される引数をキャプチャできることを見てきましたが、これらのキャプチャされた引数は後のアサーションに使用されます。モックへの呼び出しが引数に応じて異なる値を返すように、これらの引数をキーオフする方法を見たことがありません。これを行う方法が必要なようです.Mockitoでそれを理解するのに十分な経験がありません. しかし、確かに誰かがそうします!
java - Bean を再初期化する方法
外部検索エンジンをモックするために使用する applicationContext-test.xml に Bean があります。このようにして、テストを実行するとき、アプリケーション コードがこの検索エンジンを参照するときはいつでも、実際のエンジンではなくモック エンジンを使用していることがわかります。
私が直面している問題は、このエンジンがさまざまなシナリオで異なる動作をすることです。たとえば、 を呼び出すとgetDocuments()
、通常はドキュメントが返されるようにします。しかし、アプリケーション コードが例外を適切に処理していることを確認するために、例外をスローしたい場合もあります。
これは、テスト コードで Bean を参照し、いくつかのスタブを変更することで実現できますが、他のテストもパスするように、スタブを元の状態に戻す必要があります。これは多くの理由で悪い習慣のように思えるので、代替案を探しています。
私が検討した 1 つの代替案は、Bean を完全に再初期化することでした。Bean は、静的ファクトリ メソッドを使用して applicationContext-test.xml から初期化されます。私がやりたいことは次のとおりです。
- テスト コードから Bean を参照して、そのスタブの一部を変更します
- これらの新しいスタブを使用してテストを実行します
- このテストの最後に、applicationContext-test.xml で指定された静的ファクトリ メソッドを使用して Bean を再初期化します。
私はこのようなことを試しました:
しかし、これではうまくいきません。この後に実行されるテストはすべて失敗します。私の新しいfactory
変数にはFactory
必要なものが含まれており、それに応じて動作しているようですが、Bean が他の場所で参照されている場合getDocuments()
でも、以前にスタブされた例外がスローされます。明らかに、私の再初期化はローカル変数にのみ影響し、Bean 自体には影響しませんでした。
どうすれば目標を達成できるか教えてもらえますか?
アップデート
より良いテストとより良いモックを作成する方法についての提案を歓迎しますが、私の目標は Bean を再初期化することです。ユースケースに適合するかどうかに関係なく、これを行う方法を学ぶことには価値があると思います(ユースケースに適合するとは思いますが、ここで批評家を説得するのに苦労しています)。
私から賛成票または緑色のチェックマークを得る唯一の答えは、Bean を再初期化する方法を提案するものです。