gpt4 book ai didi

c# - 有没有一种方法可以测试结合 TestServer 和 moq Mock 来替换 ConfigureTestServices 类中的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:27 25 4
gpt4 key购买 nike

我可以使用 TestServer 进行集成测试,并且我可以通过在 ConfigureTestServices 中替换来手动模拟任何 DI 注入(inject)类中的方法模拟类的类如下:

var webHostBuilder =
new WebHostBuilder()
.UseEnvironment("Testing")
.UseContentRoot(projectDir)
.ConfigureTestServices(s =>
{
s.TryAddTransient(IMyClass, MyMockMyClass);
})
.UseStartup<Startup>();

在哪里MyMockMyClassMyClass 的替代品,目的是替换方法(例如:Method1)。

是否有使用最小起订量的选项 Mock.Of<MyClass>快速更换我的 Method1 , 无需创建新类 MyMockMyClass ?像这样的东西:

var mymock = Mock.Of<IMyClass>();
Mock.Get(mymock ).Setup(m => m.Method1(It.IsAny<string>()).Returns(value: whatever);

然后以某种方式使用这个 mymocks.TryAddTransient(IMyClass, ... 行在ConfigureTestServices上面的代码?

最佳答案

在配置测试服务器时让工厂委托(delegate)返回模拟服务

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>();

如果每次调用都需要一个新的模拟实例,那么将逻辑移到工厂委托(delegate)中

关于c# - 有没有一种方法可以测试结合 TestServer 和 moq Mock 来替换 ConfigureTestServices 类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54147858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com