我有這段代碼,我正在嘗試為其撰寫單元測驗:
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) 撰寫我的單元測驗。
uj5u.com熱心網友回復:
使用實際的服務集合。并添加模擬服務,以便在解決它們時您可以控制所需的行為
//...
//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
//...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483072.html
上一篇:如何為字典C#創建單元測驗
