如何模拟通过 lambda 表达式作为输入提供给匿名 Func 委托的参数?
How to mock parameter provided as input to anonymous Func delegate via lambda expression?
我有这段代码,我正在尝试为其编写单元测试:
public static void AddRuntimeServices(this IServiceCollection services)
{
services.AddScoped<IAppClient>((serviceProvider) =>
{
var snapshotService = serviceProvider.GetRequiredService<ISnapshotService>();
var urlContext = serviceProvider.GetRequiredService<IUrlContext>();
return new AppClient(
serviceUrl: urlContext.restApiUrl,
httpClient: snapshotService.Client);
});
}
在这段代码中,我可以模拟给这个方法的 services
输入,但是我如何模拟 serviceProvider
变量(来自给定的 services
输入这个方法),它作为一个输入给一个内联写入的匿名 Func 委托?
我希望能够模拟 serviceProvider
,这样我就可以写这样的东西:
serviceProvider.GetRequiredService<ISnapshotService>().Returns(somethingToReturn);
我正在使用 MSTest (Microsoft.VisualStudio.TestTools.UnitTesting) 编写我的单元测试。
使用实际的服务集合。并添加模拟服务,以便在解决它们时您可以控制所需的行为
//...
//Arrange
IServiceCollection services = new ServiceCollection();
ISnapshotService snapshotService = Mock.Of<ISnapshotService>();
IUrlContext urlContext = Mock.Of<IUrlContext>();
services.AddScoped<ISnapshotService>(sp => snapshotService);
services.AddScoped<IUrlContext>(sp => urlContext);
//Act
services.AddRuntimeServices();
IServiceProvider serviceProvider = services.BuildServiceProvider();
IAppClient client = serviceProvider.GetRequiredService<IAppClient>();
//Assert
//...assert expected behavior
//...
我有这段代码,我正在尝试为其编写单元测试:
public static void AddRuntimeServices(this IServiceCollection services)
{
services.AddScoped<IAppClient>((serviceProvider) =>
{
var snapshotService = serviceProvider.GetRequiredService<ISnapshotService>();
var urlContext = serviceProvider.GetRequiredService<IUrlContext>();
return new AppClient(
serviceUrl: urlContext.restApiUrl,
httpClient: snapshotService.Client);
});
}
在这段代码中,我可以模拟给这个方法的 services
输入,但是我如何模拟 serviceProvider
变量(来自给定的 services
输入这个方法),它作为一个输入给一个内联写入的匿名 Func 委托?
我希望能够模拟 serviceProvider
,这样我就可以写这样的东西:
serviceProvider.GetRequiredService<ISnapshotService>().Returns(somethingToReturn);
我正在使用 MSTest (Microsoft.VisualStudio.TestTools.UnitTesting) 编写我的单元测试。
使用实际的服务集合。并添加模拟服务,以便在解决它们时您可以控制所需的行为
//...
//Arrange
IServiceCollection services = new ServiceCollection();
ISnapshotService snapshotService = Mock.Of<ISnapshotService>();
IUrlContext urlContext = Mock.Of<IUrlContext>();
services.AddScoped<ISnapshotService>(sp => snapshotService);
services.AddScoped<IUrlContext>(sp => urlContext);
//Act
services.AddRuntimeServices();
IServiceProvider serviceProvider = services.BuildServiceProvider();
IAppClient client = serviceProvider.GetRequiredService<IAppClient>();
//Assert
//...assert expected behavior
//...