如何解决如何根据注入的服务对应用进行集成测试,并使用模拟服务?
我认为应用程序是什么并不重要-Asp.NET,Blazor,WPF ...等等-如果实现了依赖注入,请说:
class Foo {
public void ConfigureServices(IServiceCollection services) {
services.AddSingleton<IDispatcher,DispatchProvider>();
services.AddSingleton<IAuthenticator,AuthenticationProvider>();
}
}
...然后:
class Bar {
public Bar (IDispatcher dispatcher) {
// do something with dispatcher...
}
}
...依赖项为单元测试创建了不太直接的方法。
很明显,如果我要对Bar
(依赖于IDispatcher
)执行集成测试,则不一定要启动相关资源。
如果Bar
是一个独立对象,则可以创建一个Mock<IDispatcher>
并手动注入Bar
中。但是,就我而言,我正在开发Blazor组件。该组件依赖于IDispatch
,而另一个组件依赖于IAuthenticator
。
我唯一想做的替代选择是注入 mock 的方法是:
if (!isTest)) {
services.AddSingleton<IDispatcher,DispatchProvider>();
services.AddSingleton<IAuthenticator,AuthenticationProvider>();
} else {
services.AddSingleton<IDispatcher,MockDispatchProvider>();
services.AddSingleton<IAuthenticator,MockAuthenticationProvider>();
}
在这里,我有一个单独的类库,其中只有 mocks 。我的Web应用程序必须引用确实发臭的.DLL。
有更实用的解决方案吗?我真的不喜欢这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。