0

「StructureMap の方法」ではないことを達成しようとしているように感じます。または、そうかもしれませんが、その方法がわかりません。誰かがこれで私を助けてくれることを願っています:

(プラグインを実行しているアプリケーションによって提供される)Executeに渡されるメソッドが必要なプラグインを作成しています。 現在、私のコードは次のようになっています。IServiceProvider

public void Execute(IServiceProvider serviceProvider)
{
    //The serviceProvider is used to extract references to other objects it supplies:
    this.Context = serviceProvider.GetService<IPluginExecutionContext>();

    //This could go more than one level deep:
    this.Acme = this.Context.Acme;

    //Do something with this.Context and this.Acme here...
}

これは、本番環境で実行する場合には問題ありません。ただし、このプラグインを単体テストするときは、StructureMap を使用して IPluginExecutionContext または Acme のモック バージョンを挿入できるようにしたいと考えています。

これで、StructureMap に特定のインターフェイスの具象型を登録させる方法がわかりました。

ObjectFactory.Initialize(x =>
{
    x.For<IPluginExecutionContext>()
     .Use<MockedPluginExecutionContext>();
});

しかし、構成されている場合はこの MockedPluginExecutionContext を使用するように、または構成されserviceProvider.GetService<IPluginExecutionContext>()ていない場合はによって返される値を使用するように、Execute 実装を取得するにはどうすればよいでしょうか?

4

1 に答える 1

0

NSubstitute を使用して、次のようにしExecuteて単独でテストします (それが必要な場合)。

// arrange
var objectUnderTest = ...
var mockPluginExecContext = new MockedPluginExecutionContext();
var mockProvider = Substitute.For<IServiceProvider>();
mockProvider.GetService<IPluginExecutionContext>.Returns(mockPluginExecContext);

// act
objectUnderTest.Execute(mockProvider);

// assert
Assert.IsTrue(...);
于 2013-09-27T17:55:46.997 に答える