問題タブ [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.
xunit - 「弱い」タイプのAutoFixture
私はAutoFixtureが大好きですが、非常に反復的な「アレンジ」コードに遭遇しました。これは、どういうわけか、処理できるはずだと感じています。
これが私のシナリオで、CastleDynamicProxyの実装を使用して示されてIInterceptor
います。
最初にテスト対象のシステム:
ここで、 xUnitのデータ理論サポートを活用するいくつかの簡単なテストについて説明します。
私のCustomAutoData
属性は実際にAutoFixtureをカスタマイズして、の挿入されたインスタンスIInvocation
がほとんど適切に構成されるようにしますが、すべての実装はプロパティとプロパティにIInterceptor
完全に異なるタイプを期待するため、各テストはそれらを独自に設定する必要があります。(したがって、呼び出し。)Proxy
ReturnValue
Mock.Get(context).Setup(...)
これは問題ありませんが、のすべてのテストは、InterceptorATests
のすべてのテストと同様に、同じ数行の配置を繰り返す必要がありInterceptorBTests
ます。
Mock.Get(...)
繰り返しの呼び出しをきれいに削除する方法はありますか?IFixture
特定のテストクラスのインスタンスにアクセスするための良い方法はありますか?
integration-testing - データ統合テストで autofixture を使用してプロキシを作成する
Entity Framework を使用するドメイン用の一連のデータベース統合テストを作成しようとしています。いくつかのシナリオでは、オブジェクトを自動固定することをお勧めします。私の理想的な構文は次のようなものになります
明らかにCreateAnonymous()
、ファクトリの入力パラメータを想定していないため、これは機能していません。FromFactory()
何を提供するかについての理解に欠陥があるとしか思えません。コメントは読んでいますが、
ploehs blogを読んだ後、これらの部分がどのように相互作用するかについて少し混乱しました。
ファクトリ呼び出し中のインスタンスはMyDbContext
、渡したインスタンスではありませんInject()
autofixture - 派生型を使用したAutoFixture
AutoFixtureを使用する前の数日間、次のようなサービスの単体テストを設定するために、次のような調整を行っていた可能性がありますCustomerService
。
この長い配置は、AutoFixtureが解決するのが得意な問題のようです。AutoFixtureを使用してその配置を書き直すことができると思いますが、次のようになります。
HttpResponse
私の質問は、テストメソッドからテストメソッドに交換したい派生型がたくさんあるという事実を踏まえて、これを行うようにAutoFixtureを構成する方法はありますか?
autofixture - AutoFixture:標本ビルダーに引数を渡します
(これを行う方法が見つかりませんでした。ソースコードからはサポートされていないようですが、見落としている可能性があります)
私は次のようなことをしたいと思います:
したがって、これはAutoFixtureにすでに存在する同様のシードイディオムのバリエーションですが、シードイディオムは非常にハードコーディングされています(またはそう思います)。
Quiestion:標本の引数を受け入れるようにフィクスチャをカスタマイズすることは可能ですか?
私がこれまでに持っている最善のアイデアは、結果オブジェクトを含む特別な仕様クラスを作成することです。これにより、次のことができるようになります。
使用できる登録CircleSpecificationSpecimenBuilder
できるように:
シードオーバーロードでCreateAnonymousを使用するには、シード引数タイプがメソッドの戻りタイプと一致する必要があることに注意してください。
unit-testing - AutoFixture Customization が原因で、継承されたプロパティが入力されないのはなぜですか?
次のカスタマイズを作成し、ほとんどのテストでコンポジットの一部として適用しました。私のエンティティには読み取り専用の Id がありますが、このカスタマイズで SetId メソッドを使用して、すべてのエンティティが一時的な場合 (ID をまだ持っていない場合) に何らかの Id を持っていることを確認しています。
今日非常に奇妙なことを発見するまで、これはうまく機能しています。BaseEntity から直接継承するエンティティの 1 つをテストにフィードすると、すべて問題なく、書き込み可能なプロパティが自動入力されます。ただし、BaseEntity からさらに下にあるものから継承するエンティティを要求すると、カスタマイズによってプロパティの自動入力が妨げられます。
このテスト メソッドの User エンティティは適切に入力されています。
ただし、次のテストの AwesomeUser エンティティでは、同じプロパティが自動入力されません。
どちらのテスト ケースでも、カスタマイズにより Id プロパティが自動入力されます。カスタマイズを削除すると、SomeOtherTest の AwesomeUser インスタンスは、継承されたプロパティを適切に自動入力します。私のカスタマイズが物事を台無しにしていると想定する必要があります。
すべての BaseEntity インスタンスに Id を設定させるより良い方法はありますか、それとも AutoFixture に欠けているものがありますか? 最初、途中、最後にカスタマイズを適用しましたが、役に立ちませんでした。
moq - AutoFixture: モック メソッドが凍結されたインスタンスを返さない
私はこの簡単なテストを書こうとしています:
Verify
チェックは失敗します。
postProcessor.Process のコードは次のとおりです。
postProcessingActionReader
コンストラクターによって初期化されるインターフェイス フィールドです。
テストに合格することを期待していますが、失敗しましIPostProessingAction
た。メソッドから返された のインスタンスは、 から返されたインスタンスCreatePostProcessingActionFromJobResultXml
と同じではないことがわかりましたfixture.Freeze<>
。
私の期待は、この Mock オブジェクトを凍結した後IPostProcessingAction
、必要なすべての場所にインターフェイスの基になるモックを挿入し、返されるすべてのモック メソッドIPostProcessingAction
がこの同じオブジェクトを返すようにすることでした。
モック メソッドの戻り値についての私の期待は間違っていますか? モック メソッドが同じ凍結されたインスタンスを返すように、この動作を変更する方法はありますか?
c# - AutoFixtureは匿名MVCコントローラーの作成に失敗します
コード:
例外:
System.Reflection.TargetInvocationException:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.NotImplementedException:メソッドまたは操作が実装されていません。
MyController()
3つのパラメータを取ります。
ここの回答に記載されている修正を試しましたが、機能しません。
c# - 凍結されたモックのプロパティが上書きされています
AutoFixture が凍結されたモックのプロパティを上書きしているように見えるという問題があります。モックされたクラスのプロパティは読み取り専用であり、私が読んだことから、AutoFixture はそれに対して何もしようとすべきではありません。
以下のLINQPadで問題を再現するためのコードを含めました。Victim
2 つの読み取り専用プロパティを持つ単純なテスト クラスです。問題は、Things
プロパティの期待値を設定Object
し、型を返す AutoFixture のインスタンスとしてモックを登録するVictim
と、コレクションThings
に異なる文字列が含まれることです。
問題を再現するには、LINQPad で以下のコードをC# プログラムとして実行し、NuGet からAutoFixtureとMoqを参照します。名前空間MoqとPloeh.AutoFixtureを必ず含めてください。
私の期待は、登録したオブジェクトを取得し、返されたのRegister
コレクションが への呼び出しで参照したコレクションを返すことです。Things
Victim
SetupGet
autofixture - 無効なコンストラクタ パラメータの Autofixture テスト
次のクラスとテストがあります。null 値をパラメーターとしてコンストラクターに渡すことをテストしたいのですが、ArgumentNullException
. しかし、Autofixture のCreateAnonymous
メソッドを使用しているため、TargetInvocationException
代わりに が得られます。
この種のテストを書く正しい方法は何ですか?
tdd - 自動固定によって報告された循環参照が見つかりません
インフラストラクチャを検証しようとしています。AutoFixtureは、コードに循環参照があると言っており、動作を省略すると、標本をオブジェクトタイプにキャストできません。
ソリューションの依存関係をグラフ化しても、循環参照はありません。自動フィクスチャからの出力は、ドメインオブジェクトがドメインオブジェクトを指すパスを私に与えているように見えます。私はそれを理解していません...彼らはかなり明白です。
合格したテストがあるので先に進みますが、不要な循環参照がないことを確認したいと思います。また、この例で単純なドメインオブジェクトを構築していない場合、分離されたコンポーネントに後でAutoFixtureを使用できなくなるのではないかと心配しています。
成功するテストは次のとおりです。
失敗したテストは次のとおりです。
クライアントプロキシは次のとおりです(個別のプロジェクトはデータモデルプロジェクトのみを参照します)。
これが私がスピンアップしたデータサービスです(サービスは別のプロジェクトにあり、データモデルプロジェクトのみを参照しています)
データモデルクラスは次のとおりです(別のプロジェクト、他のすべてのプロジェクトによって参照されます)。
モデルプロジェクトのデータベースバージョンクラスは次のとおりです。
これが私のデータサービスプロジェクトのDatabaseVersionService.svcファイルです(空のasp.net、コンパイル、iisexpressからのデバッグ、atomまたはjsonは参照可能です):
throwingrecursionbehaviorを削除し、omitonrecursionbehaviorを追加した後の出力は次のとおりです。
結果メッセージ:System.InvalidCastException:タイプ'Ploeh.AutoFixture.Kernel.OmitSpecimen'のオブジェクトをタイプ'skeletor.Domain.DatabaseVersion'にキャストできません。結果StackTrace:
Ploeh.AutoFixture.Kernel.SpecimenFactoryで1.Create2.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.NoSpecimenOutputGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.Postprocessor
(Object request、ISpecimenContext context)atPloeh.AutoFixture.Kernel.CompositeSpecimenBuilder。<>c_ DisplayClass6.b _1(ISpecimenBuilder b)at System.Linq.Enumerable.WhereSelectListIterator2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2 .MoveNext()at System.Linq.Enumerable.d_ a51.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 source)at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request、ISpecimenContext context)at Ploeh.AutoFixture.Kernel.FilteringSpecimenBuilder.Create(Object request、ISpecimenContext context) Ploeh.AutoFixture.Dsl.NodeComposerで1.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.<Create>b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator
2.System.Linq.Enumerable.WhereSelectEnumerableIteratorのMoveNext()2.MoveNext() at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a5
1.System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable1 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.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Dsl.CompositeNodeComposer
1.Create(Object request、ISpecimenContext context)atPloeh.AutoFixture.Kernel.SpecimenContextのMoveNext() Ploeh.AutoFixture.Kernel.SpecimenFactoryでResolve(Object request)2.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.NoSpecimenOutputGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.Postprocessor
1.Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder。<> c _DisplayClass6.b_1 (ISpecimenBuilder b)でSystem.Linq.Enumerable2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
でCreate(Object request、ISpecimenContext context)WhereSelectListIterator 2.MoveNext()at System.Linq.Enumerable.d _a51.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1ソース)Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request、ISpecimenContext context)at Ploeh.AutoFixture.Kernel.FilteringSpecimenBuilder.Create(Object request、ISpecimenContext context)at Ploeh.AutoFixture.Dsl.NodeComposer1.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.<Create>b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator
2.MoveNext() System.Linq.Enumerable.WhereSelectEnumerableIteratorで2.MoveNext() at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a5
1.MoveNext()でSystem.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable1 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.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Dsl.CompositeNodeComposer
1.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](ISpecimenContext context)at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous [T](ISpecimenBuilderComposer composer)at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous [T](IPostprocessComposer`1 composer)at skeletor.AcceptanceTests.InfrstructureTests d:\ projects \ skeletor \ skeletor.AcceptanceTests \ InfrstructureTests.cs:line 31