Yah*_*hia 3 c# integration-testing unit-testing moq asp.net-core-mvc
我能够使用TestServer进行集成测试,并且我可以通过在ConfigureTestServices类中替换为模拟类来手动模拟任何 DI 注入类中的方法,如下所示:
var webHostBuilder =
new WebHostBuilder()
.UseEnvironment("Testing")
.UseContentRoot(projectDir)
.ConfigureTestServices(s =>
{
s.TryAddTransient(IMyClass, MyMockMyClass);
})
.UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)
哪里MyMockMyClass是 的替换MyClass,目的是替换方法(例如:)Method1。
是否可以选择使用最小起订量Mock.Of<MyClass>快速替换 my Method1,而无需创建新类MyMockMyClass?就像是 :
var mymock = Mock.Of<IMyClass>();
Mock.Get(mymock ).Setup(m => m.Method1(It.IsAny<string>()).Returns(value: whatever);
Run Code Online (Sandbox Code Playgroud)
然后以某种方式使用这种mymock与线s.TryAddTransient(IMyClass, ...在ConfigureTestServices上面的代码?
在配置测试服务器时让工厂委托返回模拟的服务
var mymock = Mock.Of<IMyClass>();
Mock.Get(mymock)
.Setup(m => m.Method1(It.IsAny<string>())
.Returns(value: whatever);
var webHostBuilder =
new WebHostBuilder()
.UseEnvironment("Testing")
.UseContentRoot(projectDir)
.ConfigureTestServices(services => {
services.RemoveAll<IMyClass>();//Remove previous registration(s) of this service
services.TryAddTransient<IMyClass>(sp => mymock);
})
.UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)
如果每次调用都需要一个新的模拟实例,则将逻辑移到工厂委托中
| 归档时间: |
|
| 查看次数: |
1672 次 |
| 最近记录: |