問題タブ [fakeiteasy]
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.
c# - カスタムデリゲートに基づくイベントに対してFakeItEasyでイベントを発生させるにはどうすればよいですか?
私がテストしているアプリケーションは、次のようなカスタムデリゲートに基づくイベントでいっぱいです。
これらのイベントを生成するクラスをモックアウトして、これらのイベントをテスト対象のクラスに上げたいと思います。
FakeItEasyは、またはRaise.With()
の従来のイベントシグネチャを使用してイベントを発生さ せるために使用できることは知っていますが、自分の状況で何をすべきかわかりません。 MyHandler(object sender, EventArgs e)
MyHandler(EventArgs e)
何か案は?
c# - FakeItEasy-メソッドをインターセプトして、それを自分の実装に置き換えることは可能ですか?
私は次のインターフェースを持っています:
私のユニットテストでは、私はそれを次のようにモックします:
私がやりたいのは、Writeメソッドをインターセプトして、テストで定義したカスタム実装を使用するようにすることです。このようなもの :
ここではAction
メソッドは存在しませんが、私がやりたいのは、渡されたパラメーターがoutputDestination.Write
カスタムアクションにリダイレクトされることです。これはFakeItEasyを使用して可能ですか?そうでない場合、この種の動作を可能にする別のモックフレームワークはありますか?
c# - 依存性注入リファクタリング
私はこのctorを持っています:
私はこのようなものを取得したいと思います:
もちろん、これはうまくいきません。このコードをリファクタリングする方法について誰か提案がありますか? 単体テストでタイプ Section のオブジェクトをモックできるようにするために、これを行う必要があります。FakeItEasy テスト フレームワークを使用しています。
c# - FakeItEasyを使用してReturns()のパラメータ値にアクセスするには?
いくつかのデータ オブジェクトを作成するために使用されるファクトリへのインターフェイスがあります。
別のモジュールに渡すモック ファクトリを作成する必要があり、このモジュールはこのモックを使用してデータを作成します。
簡単な例として、単純なモジュールは次のようになります。
したがって、ファクトリは 2 セットのパラメータで 2 回呼び出されます。
Moq を使用すると、これは簡単です。
ただし、FakeItEasy を使用すると、これは不可能と思われます。
パラメータ値にアクセスするにはどうすればよいですか?
c# - IoCの使用時にMustHaveHappenedが呼び出されない
サービスコールが行われることをテストしようとしています。電話をかけるIAuthenticationService
がありUpdateUserProfile
ます。これIAuthenticationService
はIoCにあります(StructureMap
私の場合)。
MustHaveHappened
は呼び出しを返し0
ていますが、デバッグから発生したことはわかっています。
c# - FakeItEasyを使用して呼び出しの選択をアサートする方法
FakeItEasyを使用して、呼び出しが発生したことをどのように表明しますか?
ユースケースは、リポジトリで動作するクラスを作成している場合です。メソッドの結果として、クラスは、DeleteAllを呼び出すか、すべての要素に対してDeleteを呼び出すことによって、リポジトリからいくつかの要素を削除する必要があります。
今のところ、私は次のようなtry-catchを使用しました。
しかし、私はそれが好きではなく、より多くの選択肢のためにそれはすぐに本当に醜くなるでしょう。もっと良い方法はありますか?FakeItEasywikiで何も見つかりませんでした。
c# - FakeItEasy は、MustHaveHappened は発生しなかったと述べていますが、発生しました
「サービスレイヤー」/「アプリケーションファサードレイヤー」メソッドの単体テストを試みています。これは私が単体テストしようとしている方法です:
(注...わかりやすくするために、ここに大量のメモを追加しました。通常、私はそれほどおしゃべりではありません。)
このメソッドの仕事は、ドメイン レイヤー メソッドとパーシスタンス レイヤー メソッドを調整して空の注文を作成し、それを永続化し、単純な DTO として返すことなので、これは FakeItEasy にとって素晴らしい仕事だと思いました...それらを確認します重要なメソッドは、FakeItEasy の MustHaveHappened() を使用して確実に呼び出されるように適切に編成されています。
それを念頭に置いて、私が作成した単体テストは次のとおりです。
単体テストでは、テスト中のメソッドで作成された実際の注文にアクセスできません。次善の策を試してみました...テスト中のメソッドによって返された注文の DTO バージョンを取得し、マップしますOrder の DTO バージョンをドメイン モデル Order の新しいインスタンスに戻し、FakeItEasy の MustHaveHappened() に送信する前にプロパティが同じであることを確認します。
単体テストをデバッグし、実際の注文のプロパティと FAKED の注文のプロパティを比較しました...確かに、それらは同一です。また、デバッグを通じて、_customerRepository.Save(order) が実際に呼び出されていることを確認できます。
質問 .MustHaveHappened() が失敗するのは、本質的に Order オブジェクトの 2 つの異なるインスタンスを送信しているためです。それらのプロパティは同じですが? プロパティは同じですが、FakeItEasy は、メソッド呼び出しが行われたことを確認するために入力パラメーターの同じインスタンスを必要としますか?
さらに、この種のものをどのようにテストする必要があるかについての提案 (つまり、オーケストレーション/サービス/「アプリケーション ファサード」/レイヤー メソッドと呼びたいもの) はありますか?
unit-testing - FakeItEasy 深くネストされた型の偽造
偽造しようとしている複雑なオブジェクトがあります。
しかし、次の例外があります。
The current proxy generator can not intercept the specified method for the following reasons: - Non virtual methods can not be intercepted
ネストされた型はすべてプロパティであり、get; set;
プロパティ修飾子を持つ単純な貧血型です。そして、デバッガーを調べると、それらはすべて偽物です。
チェーンの最後のプロパティをセットアップし、以前のすべてのプロパティをセットアップしないようにする方法はありますか?
asp.net-web-api - テスト プロジェクトがコントローラーを 2 回スキャンする
https://github.com/CrazyInCode/WebApiNServiceBusにあるこの特定の投稿用の github リポジトリを作成しました。
私がやろうとしているのは、WebApi アプリケーションのテストを作成することです。私のスペックテストでは...
- WebApi を使用するための HttpClient の作成
- HttpClient 経由で WebApi を呼び出す
- 結果をリストにシリアライズする
- NServiceBus への呼び出しが行われたことを確認する
これらはすべてここで見つけることができます。
ApiControllers をスキャンすると思われる StructureMap も使用しています。NServiceBus も ApiController をスキャンしているようです。テストを実行しようとすると、次のエラーが発生します。
実際にエラーを見つけるのは簡単ではありません。私はしなければならない...
- Global.cs (Specs プロジェクト) の 21 行目と 26 行目にブレークポイントを配置します。
- テストをデバッグし、テストが最初のブレークポイントで停止することを確認します
- ロードするブラウズ
http://localhost:81/ValService/api/values/assets
... - テストを続行し、テストが最後のブレークポイントで停止することを確認します
- Web ブラウザーで結果を確認する
IBus を含むすべての行を削除し、上記の手順を実行すると、テストに合格します。明らかに NServiceBus がテストの失敗に関係しています。
前に述べたように、NServiceBus はコントローラーのアセンブリをスキャンしているようです。これを防ぐために、Global.cs にこの行を追加して、NServiceBus がスキャンする対象を指定しようとしましたが、成功しませんでした。
ソリューションの主なコンポーネントは、WebApi、NServiceBus、StructureMap、FakeItEasy、および SpecFlow です。
私は立ち往生しています。どうすればテストに合格できますか?
編集:おそらく解決策は、WebApi がコントローラーを登録しないようにすることです。NServiceBus に任せるだけですか? どうすればこれを試すことができますか?
c# - ジェネリック メソッドの偽装 FakeItEasy
次のように偽装するにはどうすればよいでしょうか。
私が望むのは、偽物が何も変更せずに引数を返すことです。ただし、偽物が 1 回だけ呼び出されたことを確認したいと思います。使用例を以下に示します。
つまり、偽物はパススルーとして機能する必要がありますが、それが使用されたことを確認できる必要もあります。
これについて最善の方法は何ですか?
[不自然な例について心配しないでください...裏では多くのことが行われていますが、上の例に簡略化しました。]