問題タブ [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.

0 投票する
1 に答える
491 参照

c# - 似顔絵 - 研磨とパッケージング

Ploeh.SemanticComparisonマッピング プロセスのLikeness意図した出力を効果的に表現する方法としてを使用しています ( PluralSight に関する Mark Seemann の優れた Advanced Unit Testing コースで説明されているように)。

一部のデータが正しくマッピングされていることをテストしています。これは次のようになります。

しかし、私は満足していません:-

  1. Resemblance に名前を付けたい (つまり、.Without( y => y.ProgrammaticIdentifier)カスタマイズに名前を付ける)
  2. との対称性が失われましたAssert.Equal( expected,actual, comparer)(ただし、 からのエラー メッセージは確実に必要ですShouldEqual) 。

表現された制約内でこれを表現するよりクリーンな方法はありますか?

0 投票する
1 に答える
1363 参照

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 の実装をいじるのにほとんどの時間を費やしましたが、これを機能させることができません。

うまくいけば、私の質問は明確で、答えは実際には比較的簡単ですか?

0 投票する
6 に答える
13635 参照

c# - AutoFixture.AutoMoq は、1 つのコンストラクター パラメーターに既知の値を提供します。

単体テストでAutoFixture.AutoMoqを使い始めたばかりで、特定の値を気にしないオブジェクトを作成するのに非常に役立ちます。結局のところ、匿名オブジェクトの作成がすべてです。

私が苦労しているのは、1 つ以上のコンストラクターのパラメーターを気にするときです。以下をご覧くださいExampleComponent

特定の値を指定するテストを書きたいのですがsomeValueAutoFixture.AutoMoqIServiceによって自動的に作成されます。

Freezeコンポーネントに注入される既知の値を保持するために on myを使用する方法は知っていますが、独自の既知の値を提供IFixtureする方法がよくわかりません。

これが私が理想的にやりたいことです:

コンストラクターを直接呼び出すことでこれを実行できることはわかっていますが、これは匿名オブジェクトの作成ではなくなります。このようにAutoFixture.AutoMockを使用する方法はありますか、それとも DI コンテナーをテストに組み込む必要がありますか?


編集:

元の質問では抽象的である必要はなかったので、ここに私の具体的なシナリオを示します。

ICacheジェネリックTryRead<T>Write<T>メソッドを持つインターフェースがあります:

CookieCacheオブジェクトを文字列との間で変換するwhereITypeConverterハンドルを実装してlifespanおり、Cookie の有効期限を設定するために使用されます。

そのため、Cookie の有効期限のテストを作成するときは、寿命は気にしますが、コンバーターについてはあまり気にしません。

0 投票する
3 に答える
1212 参照

c# - AutoFixture を SutFactory として使用する場合に、独立した値を持つ同じタイプの >1 コンストラクタ パラメータを定義/管理する

AutoFixtureを SutFactory として使用すると、型の値を登録または凍結すると、その型の後続のすべての使用にその値が使用されることがわかります。ただし、次のようなコンストラクターで同じ型の 2 つのパラメーターを持つクラスがある場合:

計算された値をテストする目的で、autofixture を使用して parameterA と parameterB に一意の事前定義された値を挿入するための戦略は何ですか?

*残念ながら、ここで正確なシナリオを共有することはできませんが、コマンド パターンを使用して別のオブジェクトを操作するため、parameterA と parameterB を設定して設計を維持する唯一の方法は、両方を挿入することであり、コンストラクターが最も適切な方法です。この場合はこれを行います。

0 投票する
4 に答える
6201 参照

c# - 特定のタイプの多くを作成するときにシードとして列挙値を使用するように AutoFixture を構成する方法は?

私は次のタイプを持っています:

ここで、実行fixture.CreateMany<User>時に AutoFixture がUsersステータスごとに 1 つずつ、2 つの を返すようにします。他のすべてのプロパティ (などName) には、匿名データを入力する必要があります。

質問:
これを行うために AutoFixture を構成するにはどうすればよいですか?


私はこれを次のように試しました:

  1. オブジェクトを更新するコレクションを登録しUserます。

    このアプローチの問題は、AutoFixture が次のような他のプロパティを埋めないことです。Name

  2. ファクトリを使用するようにカスタマイズし、次Userを使用するコレクションを登録しますfixture.Create

    それもうまくいきませんでした。種子は使用されていません。