問題タブ [automocking]
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.
moq - 手動の偽物を使用したAutoFixtureを使用したAutoData理論
このシステムをテストする場合:
そして、この単体テスト:
AutoFixture.XunitとAutoFixture.AutoMoqを使用するように変換するにはどうすればよいですか(手動の偽物を使用している間)?
実際のテストでは、手動の偽物はより複雑なインターフェースと動作を持ちます。匿名変数(expectedResult文字列)を手動の偽物のコンストラクターに渡したいことに注意してください。
c# - Structure Map Automocker Inject はどのように機能しますか?
IEnumerable パラメータを含むコンストラクタがあります。具体的なオブジェクトを automocker に注入しようとすると、使用されません。
IEnumerable プロパティを含むラッパー クラスを使用すると、すべて期待どおりに動作します。
TestClass1 をテストするにはどうすればよいですか?
IEnumerable パラメータ
テストの結果は次のとおりです。
Assert.AreEqual が失敗しました。予想:<1>。実際:<0>。
ラッパー クラス パラメータ
テストの結果は次のとおりです。
成功。
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 の有効期限のテストを作成するときは、寿命は気にしますが、コンバーターについてはあまり気にしません。
unit-testing - Automoq ドキュメント
私は Automoq を使い始めています。私はこのようなことをしようとしていました:
これは実行されますが失敗します。プロパティが設定されません。Automoq のアイデアを見逃していますか? 優れたリソース/チュートリアルとは?
c#-4.0 - 構成が異なるにもかかわらず、これらのモック化されたオブジェクトが等しいのはなぜですか?
次のコードは、異なる Email プロパティを持つ 2 つのオブジェクトをモックする必要があります。しかし、代わりに、同じ Email プロパティを持つ 2 つのオブジェクトを取得します。なんで?
unit-testing - Rhino Mocks、またはStructureMap AutoMocks、同じ/継承クラスで関数をスタブする方法は?
データ アクセス クラスをテストしようとしています。基本的に、function1 は DataContext から直接データを読み取り、もう 1 つの function2 はフィルターを追加しています。function1 と function2 は、同じクラスまたは継承クラスにすることができます。
function1 の戻り値をスタブして function2 をテストするにはどうすればよいですか?
ここまでたどり着いたサンプルコードですが、動きません。Rhino Mocks と StructureMap Auto Mock を使用しようとしましたが、スタブ時にエラーが発生します。
どんな助けでも大歓迎です。どうもありがとう。
dependency-injection - クラスがシールされているときに、AutoMoqCustomization を使用した Autofixture がパラメーターなしのコンストラクターの欠如について不平を言うのをやめるのはなぜですか?
単体テストでMoqを直接使用して自分自身をモックIBuilderFactory
およびインスタンス化すると、のメソッドが1 回だけ呼び出されるBuilderService
ことを検証する合格テストを取得できます。Create()
IBuilderFactory
ただし、AutoMoqCustomizationでAutofixtureを使用し、 のモックをフリーズしてIBuilderFactory
でインスタンス化BuilderService
するとfixture.Create<BuilderService>
、次の例外が発生します。
System.ArgumentException: クラスのプロキシをインスタンス化できません: OddBehaviorTests.CubeBuilder. パラメーターなしのコンストラクターが見つかりませんでした。パラメータ名: constructorArguments
私が封印した場合(によって呼び出されるCubeBuilder
封印されたクラスに置き換えることで表されます)、テストは AutoFixture を使用して AutoMoqCustomization に合格し、例外はスローされません。SealedCubeBuilder
IBuilderFactoryForSealedBuilder.Create()
何か不足していますか?Moq を直接使用してテストに合格するので、これは Autofixture および/または AutoMoqCustomization に関連していると思います。これは望ましい動作ですか?もしそうなら、なぜですか?
再現するために、私は使用しています:
動作を示す 4 つのテストを次に示します。
必要なクラスは次のとおりです。
python - Python のオートモック?
私はC# でAutoFixture.AutoMoqを使用することに慣れており、Python で同様のものが利用できるかどうかを知りたいと思っていました。私はdjangoやデータベースを使用していないのでdjango-autofixture
、役に立ちません。
私が探しているのは、相互に関連するすべてのオブジェクトをテスト用のスタブ/モックでセットアップするために記述する必要があるコードを削減するものです。私は設計にIoCパターンを使用しています(ただし、Pythonは実際には必要ないため、DIフレームワークはありません)。
ノーズとファッジを使っています。
c# - StructureMap AutoMocker を使用した効率性
現在、Rhino モックを使用して、C#、ASP.Net MVC プロジェクトでコードをテストしています。一部のテストは、すべてのリポジトリ、サービスなどをモックアップするために非常に長くなります。
Structuremap Automocker を使用してモックとスタブを作成することで、平均して何行のコードを節約できるかについて、誰かが見積もりを持っているか、どこで見積もりを見つけられるか知っていますか?