我觉得我正在尝试完成一些不完全是“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>();
});
但如果配置了如何让我的Execute实现使用此MockedPluginExecutionContext,或者如果未配置,则使用serviceProvider.GetService<IPluginExecutionContext>()
返回的值?
答案 0 :(得分: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(...);