問題タブ [mocking]
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.
unit-testing - モックまたは実際のクラス?
他のクラスを (メンバーとして、またはメソッドの引数として) 使用するクラスには、単体テスト用に適切に動作するインスタンスが必要です。これらのクラスが利用可能で、追加の依存関係が導入されていない場合は、モックの代わりに本物を使用する方がよいのではないでしょうか?
c# - パラメータの属性変更をモックする-Moqを使用
単体テストができるように、Moqを使用してリポジトリレイヤーをモックしています。
リポジトリレイヤーのInsertメソッドは、db挿入が成功すると、エンティティのIdプロパティを更新します。
Insertメソッドが呼び出されたときにエンティティのIdプロパティを更新するようにmoqを構成するにはどうすればよいですか?
リポジトリコード:-
単体テスト:-
ContractServiceクラス(WCFサービスコントラクト)からの実装スニペット。
この情報が少し不足している可能性があることをお詫び申し上げます。私は今日、moqとモックフレームワークを学び始めました。交流
tdd - 「モックイスト」または「クラシック」TDD を実践する必要がありますか?
Martin Fowler のMocks Aren't Stubsを読みました (そして読み直しました) 。その中で、彼は TDD への 2 つの異なるアプローチを定義しています: "Classical" と "Mockist"です。彼は、「それで、私は古典主義者または模倣者であるべきですか?」という質問に答えようとしますが、「おもちゃ以外のもの」で模倣者の TDD を試したことがないことを認めています。そこで、ここで質問しようと思いました。良い答えは、Fowler の主張を繰り返したり (できればもっと明確に)、Fowler が最後に 2007 年 1 月にエッセイを更新して以来、彼が思いつかなかった議論や他の人が思いついた議論を追加するかもしれません.
tdd - 「モックイスト」TDD プラクティショナーとして、テスト対象のメソッドと同じクラスの他のメソッドをモックする必要がありますか?
Martin Fowler のMocks Aren't Stubsを読んだ後、私は「モック主義者」のやり方で TDD を実践してきたことに気付きました。
しかし、モッキングをやりすぎることができるかどうかは、モッキングTDDでも疑問に思っています。
Python スタイルの疑似コードで更新された例を次に示します。
confirm_or_create_connection() メソッドは、サーバーへの接続を作成します。
これに似たメソッドを 2 つのテストでテストしましたが、どちらも confirm_or_create_connection() と sync() をモックしています (両方とも同じクラスのメソッドですが)。1 つのテストでは、モック confirm_or_create_connection() は True を返し、テストは sync() が呼び出されたことを確認します。別のテストでは、モック confirm_or_create_connection() は False を返し、テストは sync() が呼び出されなかったことを確認します。
これは合理的ですか?または、confirm_or_create_connection() と sync() が呼び出すオブジェクトをモックする必要がありますか? (すでにこれを行っているこれらの方法の両方の他のテストがあります。)
代わりに「古典的な」TDD を実践すべきだと説明して、質問に答えないでください。これは、別の質問に対する答えです。モックストまたは従来の TDD を実践する必要がありますか?
java - 最終メソッドでクラスをモックするにはどうすればよいですか?
私はクラスAを持っているとしましょう
今、私はクラスBを持っています
このメソッドの単体テストを行うにはどうすればよいですか? 最終的な理由foo()
は、A を拡張するクラスでその機能を変更したくないからです。しかし、メソッドを真に単体テストすると同時に、実際のA.foo()
メソッドに手を伸ばして実行したくありません。
たとえば、最後のキーワードを削除して、の行に沿って注釈を追加する方法はあり@finalUnlessTest
ますか? あなたは何をお勧めします?A をインターフェイスにリファクタリングすることは非常に困難です。なぜなら、それは私たちの中心的なクラスの 1 つであり、残念ながら非常に結合されているからです。
編集#1申し訳ありませんが、言及するのを忘れていました.Javaについて話している. 私たちはまだモッキング フレームワークを使用していません。
OK と答えてください。JMockitは信じられないほど素晴らしいものであり、私の目にはレガシー コードをテストするためのキラー アプリです。特に私の場合、信じられないほど便利です。本当にありがとう!基本的に、私の疑似例では次のようなことを行います。
これはめちゃくちゃクールですか、それとも何ですか?
c++ - C ++でRAIIを使用するクラスをどのようにモックしますか
これが私の問題です。初期化時にスレッドを作成し、破棄時にそれを閉じるクラスをモックしたいと思います。私のモック クラスが実際にスレッドを作成して閉じる理由はありません。しかし、クラスをモックするために、私はそれを継承しています。モック クラスの新しいインスタンスを作成すると、基本クラスのコンストラクターが呼び出され、スレッドが作成されます。モック オブジェクトが破棄されると、基本クラスのデストラクタが呼び出され、スレッドを閉じようとします。
実際のリソースを扱わずに RAII クラスをモックするにはどうすればよいでしょうか?
c# - 単体テストに関する優れたリソースはありますか?
モックを使用した C# 単体テストについて詳しく説明している良い本や資料はありますか?
c++ - C/C++ で JNIEnv モックを作成する方法
cunit を使用してテストしたい JNI コードを C で作成しています。JNI 関数を呼び出すには、有効な JNIEnv 構造体を作成する必要があります。
そのような目的のためのモックフレームワークがあるかどうか、またはモック JNIEnv 構造体を自分で作成する方法についての指針を誰が教えてくれるかを知っている人はいますか?
java - ProcessBuilder と Process を使用する Java メソッドを単体テストするにはどうすればよいですか?
ProcessBuilder で Process を起動し、その出力をバイト配列にパイプして、プロセスが終了するとそのバイト配列を返す Java メソッドがあります。
擬似コード:
このメソッドの単体テストを行う最良の方法は何でしょうか? 信じられないほど素晴らしいJMockitを使用しても、 ProcessBuilder をモックする方法が見つかりませんでした (これは最終的なものです)。NoClassDefFoundError が返されます。
何かご意見は?
回答- Olaf が推奨したように、これらの行をインターフェイスにリファクタリングすることになりました
ここで、このインターフェイスのインスタンスを、テストしたいクラス (コンストラクター内) に渡します。通常は、元の行の既定の実装を使用します。テストしたいときは、インターフェイスのモック実装を使用するだけです。私はここで過度にインターフェースしているのではないかと思いますが...