タグ付けされた質問 「mocking」

モックと偽造は、コードまたはコンポーネントを分離して、実際に他のコンポーネントやアプリケーションの依存関係を実際に利用せずに、テスト可能なコードのユニットに対してのみユニットテストを実行できるようにする方法です。モックは、モックを検査してテストの結果を主張できるという点で偽造とは異なります。


10
Mockitoでvoidメソッドをモックする方法
void戻り値型でメソッドをモックする方法は? オブザーバーパターンを実装しましたが、方法がわからないため、Mockitoでモックできません。 そして、インターネットで例を見つけようとしましたが、成功しませんでした。 私のクラスは次のようになります: public class World { List<Listener> listeners; void addListener(Listener item) { listeners.add(item); } void doAction(Action goal,Object obj) { setState("i received"); goal.doAction(obj); setState("i finished"); } private string state; //setter getter state } public class WorldTest implements Listener { @Test public void word{ World w= mock(World.class); w.addListener(this); ... ... …

11
フェイク、モック、スタブの違いは何ですか?
私はこれらの用語の使い方を知っていますが、単体テストの偽装、模倣、およびスタブの受け入れられた定義があるかどうか疑問に思っていますか?テスト用にこれらをどのように定義しますか?それぞれを使用する状況を説明してください。 ここに私がそれらを使う方法があります: Fake:インターフェースを実装するが、固定データを含み、ロジックを含まないクラス。実装に応じて、単に「良い」または「悪い」データを返します。 Mock:インターフェイスを実装し、値を動的に設定して特定のメソッドから返す/例外をスローする機能を可能にし、特定のメソッドが呼び出されたかどうかを確認する機能を提供するクラス。 スタブ:メソッドが呼び出されたかどうかが確認されないことを除いて、モッククラスに似ています。 モックとスタブは手動で生成することも、モックフレームワークで生成することもできます。偽のクラスは手動で生成されます。私はモックを主に使用して、クラスと依存クラス間の相互作用を検証します。相互作用を確認し、コードを介して代替パスをテストした後、スタブを使用します。私は主にデータの依存関係を抽象化するため、またはモック/スタブが毎回設定するには面倒すぎるときに、偽のクラスを使用しています。



6
Mockitoは、複数回呼び出されたメソッドの引数をキャプチャできますか?
2回呼び出されるメソッドがあり、2番目のメソッド呼び出しの引数をキャプチャしたい。 これが私が試したものです: ArgumentCaptor<Foo> firstFooCaptor = ArgumentCaptor.forClass(Foo.class); ArgumentCaptor<Foo> secondFooCaptor = ArgumentCaptor.forClass(Foo.class); verify(mockBar).doSomething(firstFooCaptor.capture()); verify(mockBar).doSomething(secondFooCaptor.capture()); // then do some assertions on secondFooCaptor.getValue() しかしTooManyActualInvocations、MockitoはそれdoSomethingを1回だけ呼び出す必要があると考えているため、例外が発生します。 の2番目の呼び出しの引数を確認するにはどうすればよいdoSomethingですか?

5
Mockitoを使用して一部のメソッドのみをモックする
Mockitoを使用して、クラスの一部のメソッドだけをモックする方法はありますか? たとえば、この(確かに考案された)Stockクラスでは、(以下のテストスニペットに示すように)getPrice()とgetQuantity()戻り値をモックしたいgetValue()が、Stockクラスでコーディングされているとおりに乗算を実行したい public class Stock { private final double price; private final int quantity; Stock(double price, int quantity) { this.price = price; this.quantity = quantity; } public double getPrice() { return price; } public int getQuantity() { return quantity; } public double getValue() { return getPrice() * getQuantity(); } @Test …
402 java  mocking  mockito 

2
Mockitoがvoidメソッドをテストすると例外がスローされる
void戻り値の型を持つメソッドがあります。また、いくつかの例外がスローされる可能性があるため、スローされている例外をテストしたいと思います。すべての試行が同じ理由で失敗しました: タイプStubberのメソッドwhen(T)は引数に適用できません(void) 特定の例外をスローするメソッドを取得する方法はありますか? doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

3
メソッドに渡された戻り値
インターフェイスにメソッドがあります: string DoSomething(string whatever); これをMOQでモックして、渡されたものをすべて返すようにしたい-次のようなもの: _mock.Setup( theObject => theObject.DoSomething( It.IsAny<string>( ) ) ) .Returns( [the parameter that was passed] ) ; 何か案は?
391 c#  mocking  moq 

11
Mockitoによる静的メソッドのモック
java.sql.Connectionオブジェクトを生成するためのファクトリを作成しました: public class MySQLDatabaseConnectionFactory implements DatabaseConnectionFactory { @Override public Connection getConnection() { try { return DriverManager.getConnection(...); } catch (SQLException e) { throw new RuntimeException(e); } } } に渡されたパラメーターを検証したいのですがDriverManager.getConnection、静的メソッドをモックする方法がわかりません。テストケースにはJUnit 4とMockitoを使用しています。この特定のユースケースをモック/検証する良い方法はありますか?

14
Javaに最適なモックフレームワークは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 Javaでモックオブジェクトを作成するための最良のフレームワークは何ですか?どうして?各フレームワークの長所と短所は何ですか?

7
データベース駆動型アプリケーションの単体テストの最良の戦略は何ですか?
私は、バックエンドでさまざまな複雑さのデータベースによって駆動される多くのWebアプリケーションを使用しています。通常、ビジネスロジックやプレゼンテーションロジックとは別のORMレイヤーがあります。これにより、ビジネスロジックの単体テストがかなり簡単になります。物事は個別のモジュールに実装することができ、テストに必要なデータはオブジェクトのモッキングによって偽造できます。 しかし、ORMとデータベース自体のテストには、常に問題と妥協が伴います。 長年にわたって、私はいくつかの戦略を試しましたが、どれも完全に満足しませんでした。 既知のデータを含むテストデータベースを読み込みます。ORMに対してテストを実行し、適切なデータが返されることを確認します。ここでの不利な点は、テストDBがアプリケーションデータベースのスキーマの変更に対応しなければならず、同期が取れなくなる可能性があることです。また、人為的なデータに依存しており、愚かなユーザー入力が原因で発生するバグを公開しない場合があります。最後に、テストデータベースが小さい場合、インデックスの欠落などの非効率性は明らかになりません。(最後の1つは、実際に単体テストを使用する目的ではありませんが、問題はありません。) 本番データベースのコピーをロードし、それに対してテストします。ここでの問題は、いつでも本番データベースの内容がわからない可能性があることです。データが時間とともに変化する場合、テストを書き直す必要があるかもしれません。 一部の人々は、これらの戦略の両方が特定のデータに依存しており、単体テストでは機能のみをテストする必要があると指摘しています。そのために、私は提案を見てきました: モックデータベースサーバーを使用し、ORMが特定のメソッド呼び出しに応答して正しいクエリを送信していることのみを確認します。 データベース駆動型アプリケーションをテストする場合、どのような戦略を使用しましたか(ある場合)。あなたにとって何が一番効果的でしたか?

4
Mockitoは引数に関係なくメソッドをスタブできますか?
Mockitoを使用して、いくつかのレガシーコードをテストしようとしています。 FooDao次のようにプロダクションで使用されるaをスタブ化したい: foo = fooDao.getBar(new Bazoo()); 私は書くことができます: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); しかし、明らかな問題は、メソッドをスタブしたオブジェクトとgetBar()同じBazooオブジェクトで呼び出されないことです。(そのnewオペレーターを呪いなさい!) myFoo引数に関係なくメソッドが返されるようにメソッドをスタブできたら、私はそれを気に入っています。それができない場合は、他の回避策の提案に耳を傾けますが、妥当なテストカバレッジが得られるまで、実稼働コードを変更しないようにしたいと思います。

9
同じメソッドを同じ引数で複数回呼び出してMockitoを使用する
後続の呼び出しでスタブ化されたメソッドが異なるオブジェクトを返す方法はありますか?これを実行して、からの不確定な応答をテストしExecutorCompletionServiceます。つまり、メソッドの戻り順序に関係なくそれをテストするために、結果は一定のままです。 テストしようとしているコードは次のようになります。 // Create an completion service so we can group these tasks together ExecutorCompletionService<T> completionService = new ExecutorCompletionService<T>(service); // Add all these tasks to the completion service for (Callable<T> t : ts) completionService.submit(request); // As an when each call finished, add it to the response set. for (int i …
289 java  mocking  mockito 

7
Jestを使用してES6モジュールのインポートをモックするにはどうすればよいですか?
これは不可能だと思い始めていますが、とにかく聞きたいです。 ES6モジュールの1つが特定の方法で別のES6モジュールを呼び出すことをテストしたいと思います。ジャスミンを使えば、これはとても簡単です- アプリコード: // myModule.js import dependency from './dependency'; export default (x) => { dependency.doSomething(x * 2); } そしてテストコード: //myModule-test.js import myModule from '../myModule'; import dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { spyOn(dependency, 'doSomething'); myModule(2); expect(dependency.doSomething).toHaveBeenCalledWith(4); }); }); Jestと同等のものは何ですか?これはやりたいことのように簡単なことだと思いますが、それを理解しようとして髪を切り裂いてきました。 一番近いのは、importsをrequiresに置き換え、それらをテスト/関数内に移動することです。どちらも私がやりたいことではありません。 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.