0

MockingKernel を使用して、相互作用した場合に例外 (別名、破壊工作員) をスローするモック オブジェクトを自動的に生成することは可能ですか?

これは、さまざまな依存関係を持つオブジェクトを取得したいが、コードがそれらの一部とのみ対話する必要があることがわかっている場合に役立ちます。Bind依存関係を ( などを介して)明示的に指定しない場合ToMock、最初に対話したときに例外をスローするオブジェクトを返す必要があります。

これは、コードの実行が終了するまで待ってから、モックを呼び出していないことを確認するために一連のチェックを作成するよりもはるかに優れています。

これはすでに存在しますか?

4

2 に答える 2

1

上記の回答は、MOQ を使用して Ninject MockingKernel をセットアップし、デフォルトの動作が Strict になるようにする方法を示していませんでした。他の人の利益のために、ここに私が見つけたものがあります。

Ninject.MockingKernel.Moq 名前空間は、クラス NinjectSettingsExtensions にメソッド SetMockBehavior() および GetMockBehavior() を提供します。これにより、どのモック動作をグローバル デフォルトとして使用するかを指定できます。個々の GetMock() リクエストのデフォルトをオーバーライドする方法を見つけることができませんでした。

using Ninject;
using Ninject.MockingKernel.Moq;
var kernelSettings = new NinjectSettings();
kernelSettings.SetMockBehavior(MockBehavior.Strict);
using(var kernel = new MoqMockingKernel(kernelSettings))
{
    var mockFoo = kernel.GetMock<IFoo>(); // mockFoo.Behavior == MockBehavior.Strict
}
于 2016-10-28T21:29:50.853 に答える
0

私は NSubstitute の MockingKernel の実装を使用していました。NSubstitute は実際には「厳密な」モードをサポートしておらず、NSubstituteMockingKernelクラスを通じて構成することはできません。

ただし、厳密モードを実行するように Moq を構成できます。何よりも、クラスを使用すると、モックの動作をグローバルに変更できます。このように、構成されていない呼び出しはすべて、例外がスローされます。MoqMockingKernel

これはまさに私が探していたものです。唯一の苦労は、NSubstitute から Moq に切り替えることでした。

于 2015-03-11T19:11:04.833 に答える