Dependency injection 如何构建IOptionsMonitor<;T>;用于测试?
对于普通IOptions接口,您可以手动构建实例,例如Dependency injection 如何构建IOptionsMonitor<;T>;用于测试?,dependency-injection,configuration,.net-core,appsettings,Dependency Injection,Configuration,.net Core,Appsettings,对于普通IOptions接口,您可以手动构建实例,例如 是否有任何等效的方法可以在不使用DI的情况下生成IOptionsMonitor实例?您可以执行以下操作,然后将其用于测试: public class TestOptionsMonitor : IOptionsMonitor<MyOptions> { public TestOptionsMonitor(MyOptions currentValue) { Cur
是否有任何等效的方法可以在不使用DI的情况下生成IOptionsMonitor实例?您可以执行以下操作,然后将其用于测试:
public class TestOptionsMonitor : IOptionsMonitor<MyOptions>
{
public TestOptionsMonitor(MyOptions currentValue)
{
CurrentValue = currentValue;
}
public MyOptions Get(string name)
{
return CurrentValue;
}
public IDisposable OnChange(Action<MyOptions, string> listener)
{
throw new NotImplementedException();
}
public MyOptions CurrentValue { get; }
}
公共类测试选项监视器:IOptionsMonitor
{
公共测试选项监视器(MyOptions currentValue)
{
CurrentValue=CurrentValue;
}
公共MyOptions获取(字符串名称)
{
返回当前值;
}
公共IDisposable OnChange(操作侦听器)
{
抛出新的NotImplementedException();
}
公共MyOptions当前值{get;}
}
哈纳尼尔的回答很好
以下是它的通用版本:
public class TestOptionsMonitor<T> : IOptionsMonitor<T>
where T : class, new()
{
public TestOptionsMonitor(T currentValue)
{
CurrentValue = currentValue;
}
public T Get(string name)
{
return CurrentValue;
}
public IDisposable OnChange(Action<T, string> listener)
{
throw new NotImplementedException();
}
public T CurrentValue { get; }
}
公共类测试选项监视器:IOptionsMonitor
其中T:class,new()
{
公共测试选项监视器(T currentValue)
{
CurrentValue=CurrentValue;
}
公共T获取(字符串名称)
{
返回当前值;
}
公共IDisposable OnChange(操作侦听器)
{
抛出新的NotImplementedException();
}
公共T CurrentValue{get;}
}
只需使用您的对象创建一个实例 我试着去模仿这个物体,这很容易。新的测试选项监视器
var options = new TestOptionsMonitor(new MyOptions{ Option1 = "Test" });
使用上面的测试选项Monitor,您就可以开始了。免责声明:如果您避免使用外部库,前面的答案就可以了!考虑一下这个,如果你想利用现有的图书馆来模拟你的东西!p>
如果使用NSubstitute
库进行模拟,则可以通过执行以下操作模拟IOptionsMonitor
:
//排列
var mockedOptions=Substitute.For();
mockedOptions.CurrentValue.Returns(新的BasicCredentialSchemaOptions(/*snip*/);
//表演
var result=mockOptions.CurrentValue;//不丢弃和发射NSubstitue的返回物
//断言
Assert.NotNull(结果);