C# 如何在IntegrationTest中使用NSubstitute进行模拟

C# 如何在IntegrationTest中使用NSubstitute进行模拟,c#,xunit,nsubstitute,C#,Xunit,Nsubstitute,我在集成测试中使用了一个ContainerFixture类,如下所示: services.AddSingleton(Mock.Of<IWebHostEnvironment>(w => w.EnvironmentName == "Development" && w.ApplicationName == "Application.WebUI")); services.AddSingleton(Mock.Of(w=> w、

我在集成测试中使用了一个ContainerFixture类,如下所示:

services.AddSingleton(Mock.Of<IWebHostEnvironment>(w =>
 w.EnvironmentName == "Development" &&
 w.ApplicationName == "Application.WebUI"));
services.AddSingleton(Mock.Of(w=>
w、 环境名称==“开发”&&
w、 ApplicationName==“Application.WebUI”);
在上面的例子中,我使用Moq,但我想使用NSubstitute

当我将Mock.of替换为Substitute.For时,我得到以下错误:

services.AddSingleton(Substitute.For<IWebHostEnvironment>(w =>
 w.EnvironmentName == "Development" &&
 w.ApplicationName == "Application.WebUI"));
services.AddSingleton(替代.For(w=>
w、 环境名称==“开发”&&
w、 ApplicationName==“Application.WebUI”);
错误:无法将lambda表达式转换为类型“object”,因为它不是委托类型


我们应该如何使用Substitute来代替上面的示例?

for的参数在NSubstitute中作为构造函数参数传递。这对于用虚拟成员替换类很有用

另见

(参数对象[]构造函数参数)的公共静态T NSubstitute中的等效项用于您的示例:

var env = Substitute.For<IWebHostEnvironment>();
env.EnvironmentName.Returns("Development");
env.ApplicationName.Returns("Application.WebUI");
services.AddSingleton(env);
var env=Substitute.For();
环境名称返回(“开发”);
返回(“Application.WebUI”);
服务业。AddSingleton(环境);

我没有投反对票,但问题的标题有点模糊。也许这个可以改进。
var env = Substitute.For<IWebHostEnvironment>();
env.EnvironmentName.Returns("Development");
env.ApplicationName.Returns("Application.WebUI");
services.AddSingleton(env);