問題タブ [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.
c# - 似顔絵 - 研磨とパッケージング
Ploeh.SemanticComparison
マッピング プロセスのLikeness
意図した出力を効果的に表現する方法としてを使用しています ( PluralSight に関する Mark Seemann の優れた Advanced Unit Testing コースで説明されているように)。
一部のデータが正しくマッピングされていることをテストしています。これは次のようになります。
しかし、私は満足していません:-
- Resemblance に名前を付けたい (つまり、
.Without( y => y.ProgrammaticIdentifier)
カスタマイズに名前を付ける) - との対称性が失われました
Assert.Equal( expected,actual, comparer)
(ただし、 からのエラー メッセージは確実に必要ですShouldEqual
) 。
表現された制約内でこれを表現するよりクリーンな方法はありますか?
c# - SUT の自動モック
自動モッキングに関するMark Seeman の記事を読み、その記事に基づいて再利用可能なウィンザー コンテナーを作成しています。
マークの記事の私の実装 (基本的に直接コピー)
主な作業はAutoMoqResolver
教室で行います。これにより、クラスがインターフェースに依存するたびにモックが提供されます。
は、次のインターフェイスAutoMoqResolver
の実装を使用してコンテナーに追加されます。IWindsorInstaller
次に、私のコンテナーはインストーラーを実行するだけで、単体テストでインターフェイスの依存関係のモックを自動的に提供する準備が整います。
素晴らしい!
これをテストしたところ、依存関係が自動的に喜んでモック化されたので、実際のコードに適用しました。これは、クラスをテストするときに従う傾向があるパターンのために、ソリューションが役に立たないことに気付いたときです。私の具体的な問題は、SUT のあるメソッドが別のメソッドから呼び出されていることを確認するために、SUT 自体を自動モックできるようにしたいということです。
テストする必要がある私のコード
例を挙げて説明します。私は MVC コードを開発しており、次の一般的なパターンを使用して目立たない AJAX をサポートしています。
私のテストパターン
PerformTask()
メソッドがDoSomethingWithAjax()
orから呼び出されたことを確認するために、次のようなDoSomethingWithoutAjax()
新しいTestableExampleController
クラスを定義します。
TestableExampleController
次のテストに合格するように、SUT として使用できます。
私の問題
このテストをリファクタリングして、次AutoMockContainer
のようにクラスを使用してもうまくいきません:
Mock<TestableExampleController>
パラメーターなしのコンストラクターが見つからないため、テストは のインスタンスの作成に失敗します。
クラス MyNamespace.TestableExampleController のプロキシをインスタンス化できません。パラメーターなしのコンストラクターが見つかりませんでした。パラメータ名: constructorArguments
私の提案する解決策
理想的には、コンテナーに登録して任意のコンポーネントに自動的にモックを提供できるラッパー クラスを実装したいと考えています。
合格する次のテストを記述できるようにしたいと思います。
これを達成する方法がよくわかりません。新しい ISubDependencyResolver の実装をいじるのにほとんどの時間を費やしましたが、これを機能させることができません。
うまくいけば、私の質問は明確で、答えは実際には比較的簡単ですか?
c# - AutoFixture.AutoMoq は、1 つのコンストラクター パラメーターに既知の値を提供します。
単体テストでAutoFixture.AutoMoqを使い始めたばかりで、特定の値を気にしないオブジェクトを作成するのに非常に役立ちます。結局のところ、匿名オブジェクトの作成がすべてです。
私が苦労しているのは、1 つ以上のコンストラクターのパラメーターを気にするときです。以下をご覧くださいExampleComponent
:
特定の値を指定するテストを書きたいのですがsomeValue
、AutoFixture.AutoMoqIService
によって自動的に作成されます。
Freeze
コンポーネントに注入される既知の値を保持するために on myを使用する方法は知っていますが、独自の既知の値を提供IFixture
する方法がよくわかりません。
これが私が理想的にやりたいことです:
コンストラクターを直接呼び出すことでこれを実行できることはわかっていますが、これは匿名オブジェクトの作成ではなくなります。このようにAutoFixture.AutoMockを使用する方法はありますか、それとも DI コンテナーをテストに組み込む必要がありますか?
編集:
元の質問では抽象的である必要はなかったので、ここに私の具体的なシナリオを示します。
ICache
ジェネリックTryRead<T>
とWrite<T>
メソッドを持つインターフェースがあります:
CookieCache
オブジェクトを文字列との間で変換するwhereITypeConverter
ハンドルを実装してlifespan
おり、Cookie の有効期限を設定するために使用されます。
そのため、Cookie の有効期限のテストを作成するときは、寿命は気にしますが、コンバーターについてはあまり気にしません。
c# - AutoFixture を SutFactory として使用する場合に、独立した値を持つ同じタイプの >1 コンストラクタ パラメータを定義/管理する
AutoFixtureを SutFactory として使用すると、型の値を登録または凍結すると、その型の後続のすべての使用にその値が使用されることがわかります。ただし、次のようなコンストラクターで同じ型の 2 つのパラメーターを持つクラスがある場合:
計算された値をテストする目的で、autofixture を使用して parameterA と parameterB に一意の事前定義された値を挿入するための戦略は何ですか?
*残念ながら、ここで正確なシナリオを共有することはできませんが、コマンド パターンを使用して別のオブジェクトを操作するため、parameterA と parameterB を設定して設計を維持する唯一の方法は、両方を挿入することであり、コンストラクターが最も適切な方法です。この場合はこれを行います。
c# - 特定のタイプの多くを作成するときにシードとして列挙値を使用するように AutoFixture を構成する方法は?
私は次のタイプを持っています:
ここで、実行fixture.CreateMany<User>
時に AutoFixture がUsers
ステータスごとに 1 つずつ、2 つの を返すようにします。他のすべてのプロパティ (などName
) には、匿名データを入力する必要があります。
質問:
これを行うために AutoFixture を構成するにはどうすればよいですか?
私はこれを次のように試しました:
オブジェクトを更新するコレクションを登録し
User
ます。このアプローチの問題は、AutoFixture が次のような他のプロパティを埋めないことです。
Name
ファクトリを使用するようにカスタマイズし、次
User
を使用するコレクションを登録しますfixture.Create
。それもうまくいきませんでした。種子は使用されていません。