問題タブ [autofixture]
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.
autofixture - 登録 AutoFixture を使用した Html ヘルパーの単体テスト
元の質問は次のとおり です。AutoFixtureを使用したHtmlヘルパーのユニットテスト
元の質問を再度開く必要があるかどうかわかりません。ただし、元の質問を解決済みとしてマークしたため、新しい質問を作成することにしました。私がこれを間違っていた場合はお詫び申し上げます。
マークの提案したアプローチを使用していましたが、フリーズを使用しているときに行き詰まりました。
以下は完全なソースコードです... テスト中のクラス:
単体テストは、HttpContext 内の指定されたキーに対して期待どおりに返される Html を確認することです。
以下のようにフィクスチャを構成しました
次に、ViewContext でフリーズします。
以下の例外が発生します。
エラー 1 テスト 'MvcDemo2.Tests.Controllers.SampleHelpersTestsAutoFixture.SampleTableHtmlHelper_WhenKeyExistWithinHttpContext_ReturnsExpectedHtml' が失敗しました: System.Reflection.TargetInvocationException : 呼び出しのターゲットによって例外がスローされました。---- System.NotImplementedException : メソッドまたは操作が実装されていません。System.RuntimeMethodHandle._InvokeMethodFast (IRuntimeMethodInfo メソッド、オブジェクト ターゲット、Object[] 引数、SignatureStruct& sig、MethodAttributes methodAttributes、RuntimeType typeOwner) で System.RuntimeMethodHandle.InvokeMethodFast (IRuntimeMethodInfo メソッド、オブジェクト ターゲット、Object[] 引数、シグネチャ sig、MethodAttributes methodAttributes 、RuntimeType typeOwner) System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、バインダー バインダー、
System.Reflection.RuntimePropertyInfo.SetValue (オブジェクト obj、オブジェクト値、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] インデックス、CultureInfo カルチャ) で System.Reflection.RuntimePropertyInfo.SetValue (オブジェクト obj、オブジェクト値、オブジェクト [] インデックス) でPloeh.AutoFixture.Kernel.AutoPropertiesCommand 1.Create1.Execute(T specimen, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.Postprocessor
(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext() at System .Linq.Enumerable.d__a52.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator1.MoveNext()
1 ソース) Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(オブジェクト要求、ISpecimenContext コンテキスト) で Ploeh.AutoFixture.Kernel.RecursionGuard.Create(オブジェクト要求、ISpecimenContext コンテキスト) で Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(オブジェクト要求) ) at Ploeh.AutoFixture.Kernel.SeedIgnoringRelay.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext() at System.Linq.Enumerable.d__a5 1 ソース) Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create (オブジェクト要求、ISpecimenContext コンテキスト) で Ploeh.AutoFixture.Kernel.Postprocessor 2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable2.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.<Create>b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator
System.Linq.Enumerable.WhereSelectEnumerableIterator 1.MoveNext() で System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 2 スコープ、HttpContextBase httpContext) で System.Web.Mvc.ViewContext.SetClientValidationEnabled(ブール値が有効、IDictionary`2 スコープ) 、HttpContextBase httpContext) で System.Web.Mvc.ViewContext.set_ClientValidationEnabled(ブール値) C:\Users... 782.MoveNext()
at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a51 source) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(Object request) at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](ISpecimenContext context, T seed) at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](ISpecimenBuilderComposer composer, T seed) at Ploeh.AutoFixture.FixtureFreezer.Freeze[T](IFixture fixture, T seed)
at MvcDemo2.Tests.Controllers.SampleHelpersTestsAutoFixture.SampleTableHtmlHelper_WhenKeyExistWithinHttpContext_ReturnsExpectedHtml() in C:\Users\...:line 78 ----- Inner Stack Trace ----- at System.Web.HttpContextBase.get_Items() at System.Web.Mvc.ViewContext.ScopeCache.Get(IDictionary
プロパティViewContext.SetClientValidationEnabledの値を設定しようとすると失敗するようです。
私はこれにこだわっています。どんな考えでも大歓迎です。
entity-framework - AutoFixtureを使用して(または可能であれば使用せずに)偽のEF4Rerefenceを追加する方法
私は次のコードを持っています:
この行のようです:
実行すると例外が発生し、参照オブジェクトをモックしようとしています。これを使用せずにコードを呼び出すと、すべて機能しますが、テストコードにはsys_COUNTRYReferenceオブジェクトが必要です。
例外:
このRelatedEndの所有者がnullの場合、要求された操作は許可されません。デフォルトのコンストラクターで作成されたRelatedEndオブジェクトは、シリアル化中のコンテナーとしてのみ使用する必要があります。
この問題を解決する方法、または別の角度から攻撃する方法についてアドバイスしてください。
ありがとうございました。
c# - 大きな依存オブジェクトグラフにモックを注入する
テストしたいオブジェクトのかなり重要な依存関係グラフがあります。どこでもモックを登録せずに依存関係を解決する最も簡単な方法は何ですか?
たとえば、次のような依存関係グラフがあります。
をテストしたいPublicApi.CreateUser()
のですが、すべてのコードを実行したいのですが、データベースに何も書き込む必要がないようにリポジトリをモックしたいのです。DI コンテナーを使用してすべてのサービスを登録し、リポジトリをモックに置き換えてからPublicApi
、メソッドを解決して実行する必要がありますか?
私はAutoFixtureを調べていましたが、このようなものを処理できるように見えますが、「フリーズ」と「登録」全体に頭を悩ませることはできず、Moqとの統合です。
c# - メソッドが呼び出されたことを確認するにはどうすればよいですか?
にICreateService
依存するクラスがありITicketApiAdapter
ます。匿名の作成サービスを作成するときに挿入されるように、モックの ITicketAdaper を登録しようとしました。
したがって、セットアップでは、チケットアダプター用に次のレジスタを用意しています。
ICreateService
私の理解では、これはとの両方を「フリーズ」する必要があるMock<ITicketApiAdapter>
ため、匿名インスタンスを要求すると、それが登録したインスタンスになります。
次のようなテストがあります。
メソッドが呼び出されたことを確認できるように、登録したのは apiTicketAdapter であることを期待しています。ステップスルーすると、TicketApiAdapter が呼び出されますが、Moq は呼び出されなかったと言っています。
編集
これは私が得るエラーです:
CreateServiceCallsAddTicketComment が例外をスローしました: Moq.MockException: モックでの呼び出しが 1 回期待されましたが、0 回でした: x => x.AddTicketComment(It.IsAny(), It.IsAny(), It.IsAny())
構成されたセットアップ: x => x.AddTicketComment(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never 呼び出しは実行されませんでした。
data-annotations - AutoFixtureがStringLengthデータ注釈で機能しないのはなぜですか?
AutoFixture 2に再度アップグレードしようとしていますが、オブジェクトのデータ注釈に問題が発生しています。オブジェクトの例を次に示します。
匿名を作成しようとしてBleh
いますが、注釈付きのプロパティに匿名の文字列が入力されるのではなく、空になります。
Bonus BitsによるとStringLength
、2.4.0の時点でサポートされているはずですが、サポートされていなくても、空の文字列は期待できません。NuGetのv2.7.1を使用しています。データ注釈付きオブジェクトを作成するために必要な、ある種のカスタマイズまたは動作を見逃したことがありますか?
nunit - 検証を使用して、Moqモッククラスで期待されるパラメーター値を確認します
モック内のメソッドが期待されるオブジェクトパラメータで呼び出されていることを確認しようとしています。私はMoq、nUnitを使用していて、AutoFixtureのLikenessが仕事を成し遂げるべきだと考えています。以下は私がやろうとしていることの簡略版です。
AutoFixtureでこれを行う方法はありますか?Something
適切なパラメータで呼び出されたことを確認するためのより良い方法はありますか?
クラス内のEqualsをオーバーライドしA
てプロパティ値を比較し、Verify
行を次のように変更します。
パスしますが、プロジェクトのAのようなすべてのクラスでEqualsをオーバーライドしたくありません。
c# - AutoFixture で文字列プロパティの匿名番号を生成する
いくつかのマッピング メソッドの単体テストを行っていますが、文字列型のソース プロパティが整数型の宛先プロパティにマップされています。
したがって、AutoFixture に、すべての文字列プロパティではなく、特定の文字列プロパティの匿名整数を使用してソース オブジェクトを作成してもらいたいと考えています。
これは可能ですか?
c# - AutoFixtureLikeness-一致するプロパティのみを比較します
AutoFixture.SemanticComparisonを使用して、次の2つのオブジェクトの類似性を比較できるようにしたいと思います。
さて、私がこのようにそれをするとき:
次の例外が発生します:「次のメンバーが一致しませんでした:-b。」
次のように「b」メンバーを省略できることがわかりました。
ただし、これは非常に面倒です。クラスObject2に新しいメンバーを追加するたびに、単体テスト(または少なくとも単体テストヘルパー)を修正する必要があるためです。
「両方のオブジェクトに存在するサブセットについてのみ類似性を比較したい」と言う方法はありますか?
c# - MoqやAutoFixtureなどを使用してモックと匿名オブジェクトのハイブリッドを作成しますか?
仕事中に次のようなクラスに遭遇しました。
問題は、A、B、Cにアクセスし、GetSomeValue()メソッドを呼び出すコードがあることです(これは良い設計ではないと思いますが、時々私の手が縛られます;-))。このオブジェクトのモックを作成したいのですが、同時にA、B、Cがいくつかの値に設定されています。したがって、moqをそのように使用する場合:
GetSomeValue()メソッドで結果を設定できますが、すべてのプロパティがnullに設定されています(実際のオブジェクトは厄介なデータオブジェクトであり、上記よりも多くのプロパティがあるため、Setup()を使用してすべてを設定するのは非常に面倒です)簡略化された例)。
一方、次のようにAutoFixtureを使用します。
GetSomeValue()メソッドの呼び出しを失敗させることができなくなります。
2つを組み合わせて、匿名の値を設定し、通話結果を設定する方法はありますか?
編集
nemesvの回答に基づいて、次のユーティリティメソッドを導き出しました(正しく理解できたと思います)。
c# - ファクトリを使用するクラスをテストするにはどうすればよいですか?
ファクトリ()を使用するクラスをテストしようとしていますが、Func<T>
MoqとAutoFixtureを使用しています。
「環境」をセットアップして、ファクトリが使用されているかどうか、および返されたインスタンスで何回、どのメソッドが使用されているかを確認するための最良の方法は何ですか?
現在、私はモックを作成してT
おりInjecting
、Func<T>
返されたすべてのモックインスタンスのカウントを保持しています。
しかし、それは私にはちょっと気難しい/醜い感じがします。そして、テストクラスのインスタンス変数は危険なものだと確信しています