問題タブ [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.
fakeiteasy - FakeItEasy は、out パラメータを使用して Lazily を返します
私は FakeItEasy を使用するのが初めてで、最初の試みで立ち往生しています。偽造したいインターフェースには、次のようなメソッドがあります。
引数がどのように渡されるかを確認したいので、ReturnsLazily を使用しています。これが私の試みです:
これはコンパイルされますが、実行すると次の例外が生成されます。
どちらが正しいのですが、out パラメータを追加する方法がわかりません。ReturnLazily 部分を次のように変更すると:
コンパイルされず、エラーがわかりません:
私のような初心者にとって、これは 4 つのパラメーターが好きではなく、「out」をどうするかを理解していないように見えます。誰かがこれらのエラーをどのように読むべきか説明してもらえますか? 実際の例も大歓迎です:-)
どうもありがとう!
- - 編集 - -
これはうまくいくようです:
私が望んでいたよりも少し読みにくいですが、これはReturnsLazilyの使用目的に近いですか?
asp.net-mvc - アンカータグとともに RedirectResult を返すコントローラーの ActionMethod を単体テストする必要がある
コントローラーの return ステートメントは次のとおりです。
したがって、私のテスト メソッドでは、コントローラーの (sut) UrlHelper を割り当てて、null 参照例外が発生しないようにする必要があります。FakeItEasy を使用して HttpContext をモックしています。
これは正常に動作しているようですが、コントローラーのアクション メソッドが正しいメソッドとコントローラーにリダイレクトされたことを証明したい場合:
コントローラー アクションが RedirectToRouteResult を返すときのように、RouteValues を抽出できません。別名:
b/c RedirectResult では、これらの変数にアクセスできません。また、キャストしようとすると:
キャスト エラーが発生します。
コントローラーが適切な場所にリダイレクトされていることをテストできるようにする必要がありますが、それはできません b/c Url.Action(...) は RouteData、RouteCollection などの他のアイテムと内部的に連携する必要があります...
ControllerContext を使用して、テストで必要な「ルート」データを事前設定する方法を誰でも知っています。
テストで Url.Action に正しい値を吐き出すにはどうすればよいですか?
ありがとう!マイク
mocking - FakeItEasy に関する任意の優れたチュートリアル
FakeItEasy をモッキング フレームワークとして使用することを検討しています。
FakeItEasy に関するチーム向けのワークショップを実施するために、このフレームワークを詳細に説明する優れたチュートリアルを探しています。github のドキュメントを見てみましたが、非常に簡潔であることがわかりました。
よく練られたページ/ビデオをご存知でしたら、それを教えていただけませんか。ありがとう。
c# - FakeItEasy の AutoMocking を無効にする
インターフェースがあるとしましょう
FakeItEasy でインスタンスを作成すると、次のようになります。
すべてのプロパティ (テーブル) には、デフォルトの偽の値があります。これがほとんどのシナリオで便利な理由はわかりますが、私のシナリオでは、すべてをそうする必要がありますnull
それを行う賢い方法はありますか?
c# - 式を追加するにはどうすればよいですか> 偽物への傍受として?
メソッドと引数が既に として表されている場合、FakeItEasy でメソッド呼び出しをインターセプトする別の方法はありExpression<Action<T>>
ますか?
通常、私は単に使用します
しかし、私の現在の状況では、偽物IFoo
と偽物がありExpression<Action<IFoo>>
、2つを一緒に結婚させようとしています.
これは実際に FakeIEasy 用に書き直した既存の Moq コードですが、それが可能かどうかはわかりません。これの Moq バージョンは
明らかな(以下)を試しましたが、「指定されたオブジェクトは偽のオブジェクトとして認識されていません」というエラーが発生しました(偽のオブジェクトがまったく参照されていないためと思われます!)
IFakeObjectCallRule
実装して使用することでこれが可能であると推測する危険がありますFake.GetFakeManager(foo).AddRuleFirst(customRule)
が、これを行うより簡単な方法があるかどうか疑問に思っていましたか?
c# - FakeItEasy オブジェクトへの呼び出しをリセットする
私はフェイクを使用して、オブジェクトのフェイクを簡単に生成します。次に、偽のオブジェクトのいくつかのメソッドが呼び出されたかどうかをテストします。問題は、単体テストごとに、偽物の状態を元の状態にリセットすることです。
ユニットテストクラスごとに偽物を1回生成するため、これが必要なので、何らかの方法で呼び出し状態をリセットする必要があります。
これは私のコードがどのように見えるかです:
c# - 全体を実行すると単体テストが失敗する - API の制限: アセンブリは既に別の場所から読み込まれています
単体テストのセットを持っていますが、(resharper を使用して) 一緒に実行すると、次のエラーが発生します。
セットアップ: System.TypeInitializationException: 'FakeItEasy.Core.FakeScope' の型初期化子が例外をスローしました。----> System.IO.FileLoadException : API 制限: アセンブリ 'file:///C:\Users\abrown\Documents\Repos\ink.services.jetstar\My.Namespace.Tests.Unit\bin\Debug \My.Namespace.dll' は、別の場所から既に読み込まれています。同じ appdomain 内の新しい場所からロードすることはできません。
それらを個別に実行すると、合格します。
例外のさらに下では、次のような行で失敗しています。
編集
これは、「標準」の NUnit テスト ランナーを使用した場合にも発生します。
@david-arno がコメントで述べたように、ReSharper ランナーの設定を変更することで修正されます (明らかに re-sharper のみ)。
完全を期すために、ここに完全なスタック トレースがあります
My.CompanyNamespace.ProjectName.Tests.Unit.DownloadAndStoreContentTests.gets_content_downloader_for_each_section_in_index: セットアップ: System.TypeInitializationException: 'FakeItEasy.Core.FakeScope' の型初期化子が例外をスローしました。----> System.IO.FileLoadException : API 制限: アセンブリ 'file:///C:\Users\abrown\Documents\Repos\My.CompanyNamespace\My.CompanyNamespace.ProjectName.Tests.Unit\bin\Debug \My.CompanyNamespace.ProjectName.dll' は、別の場所から既に読み込まれています。同じ appdomain 内の新しい場所からロードすることはできません。
FakeItEasy.Core.FakeScope.get_Current() で FakeItEasy.IoC.DictionaryContainer.<>c_ DisplayClass1 1.b _0
1.<Register>b__0(DictionaryContainer c) at FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) at FakeItEasy.ServiceLocator.Resolve[T]() at FakeItEasy.RootModule.<RegisterDependencies>b__3(DictionaryContainer c) at FakeItEasy.IoC.DictionaryContainer.<>c__DisplayClass1
( DictionaryContainer c) で FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) で FakeItEasy.ServiceLocator.ResolveT で FakeItEasy. RootModule.b_1a (DictionaryContainer c) at FakeItEasy.IoC.DictionaryContainer.<>c _DisplayClass11.<Register>b__0(DictionaryContainer c) at FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) at FakeItEasy.ServiceLocator.Resolve[T]() at FakeItEasy.RootModule.<RegisterDependencies>b__19(DictionaryContainer c) at FakeItEasy.IoC.DictionaryContainer.<>c__DisplayClass1
1.b__0(DictionaryContainer c) で FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) で FakeItEasy.ServiceLocator.ResolveT で FakeItEasy.A.FakeT で My.CompanyNamespace.ProjectName.Tests.Unit.DownloadAndStoreContentTests.SetUp() で c: \Users\abrown\Documents\Repos\My.CompanyNamespace\My.CompanyNamespace.ProjectName.Tests.Unit\DownloadAndStoreContentTests.cs:23 行目 -- System.Reflection.RuntimeAssembly での FileLoadException。System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef、Evidence assemblySecurity、RuntimeAssembly reqAssembly、StackCrawl、StackCrawlMark&stackMark、IntPtr pPrivHostBinder、Boolean throwOnFileNotFound、Boolean forIntrospection、Boolean suppressSecurityChecks) System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef、Evidence assemblySecurity、RuntimeAssembly reqAssembly、StackCrawlMark& stackMark、Boolean throwOnFileNotFound、Boolean forIntrospection、Boolean suppressSecurityChecks) での IntPtr pPrivHostBinder、Boolean throwOnFileNotFound、Boolean forIntrospection、Boolean suppressSecurityChecks)FakeItEasy.Core.ApplicationDirectoryAssembliesTypeCatalogue.GetAllAvailableAssemblies() の System.Reflection.Assembly.ReflectionOnlyLoadFrom(String assemblyFile) の InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)。 FakeItEasy.ImportsModule.b の Core.ApplicationDirectoryAssembliesTypeCatalogue..ctor()FakeItEasy.Core.ApplicationDirectoryAssembliesTypeCatalogue..ctor() の GetAllAvailableAssemblies() FakeItEasy.ImportsModule.b のFakeItEasy.Core.ApplicationDirectoryAssembliesTypeCatalogue..ctor() の GetAllAvailableAssemblies() FakeItEasy.ImportsModule.b の_1(DictionaryContainer c) FakeItEasy.IoC.DictionaryContainer.SingletonResolver1.UnresolvedState.Resolve(DictionaryContainer container) at FakeItEasy.IoC.DictionaryContainer.<>c__DisplayClass1
1.b_ 0(DictionaryContainer c) FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) で FakeItEasy.ServiceLocator.ResolveT で FakeItEasy.ImportsModule.b _0(DictionaryContainer c) FakeItEasy.IoC.DictionaryContainer.SingletonResolver1.UnresolvedState.Resolve(DictionaryContainer container) at FakeItEasy.IoC.DictionaryContainer.<>c__DisplayClass1
1.b_ 0(DictionaryContainer c) で FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) で FakeItEasy.ServiceLocator.ResolveT で FakeItEasy.ImportsModule.b _4[T](DictionaryContainer c) で FakeItEasy. .IoC.DictionaryContainer.SingletonResolver1.UnresolvedState.Resolve(DictionaryContainer container) at FakeItEasy.IoC.DictionaryContainer.<>c__DisplayClass1
1.b__0(DictionaryContainer c) FakeItEasy.IoC.DictionaryContainer.Resolve(Type componentType) で FakeItEasy.ServiceLocator.ResolveT で FakeItEasy.Core.FakeScope.RootScope..ctor() で FakeItEasy.Core.FakeScope..cctor()
c# - FakeItEasy を使用してアクションを偽造する方法<>
私は FakeItEasy ライブラリを使用して、単体テスト用の偽物を作成しています。
ClassUnderTest
メソッドをテストしたい がありますMethodToTest(Data dataObject)
。このメソッドは、私が偽造したいインターフェースのメソッドを呼び出しています:
単体テストでは、テスト メソッドがインターフェイスを正しく (正しいプロパティ値で) 呼び出すかどうかを確認したいと思います。
しかし、このテストでは何かが間違って設定されています。私は例外を受け取ります:
テスト メソッド TestProject1.UnitTest1.TestMethod1 が例外をスローしました: FakeItEasy.ExpectationException: 厳密な偽の構成されていないメソッド「Execute」への呼び出し。
誰かがCallTo()
ステートメントを正しく構成する方法を知っていますか?