[英]ASP.NET Core 3.1 injecting array of objects from appsettings.json into an injected service
[英]Using and injecting from appsettings.json in unit tests on .net core
我創建了一個asp.net核心Web應用程序和一個單元測試應用程序。
我使用“ASP.NET Core Web Application(.NET Core)”模板創建了asp.net應用程序,並使用“類庫(.NET Core)”模板創建了單元測試項目。
我使用以下文章中的說明配置了MSTest:
宣布MSTest Framework支持.NET Core RC2 / ASP.NET Core RC2
我已將應用程序組織到控制器和服務中,控制器從appsettings.json讀取值並將這些值作為參數傳遞給服務方法。
我有一個AppSettings類如下
public class AppSettings
{
public string Setting1 { get; set; }
public string Setting2 { get; set; }
public string Setting3etc { get; set; }
}
public static class App
{
public static AppSettings Settings { get; set; }
public static void ConfigureSettings(IOptions<AppSettings> settings)
{
Settings = settings.Value;
}
}
控制器構造函數如下
public ValuesController(IOptions<AppSettings> settings)
{
App.ConfigureSettings(settings);
}
在Startup.cs中,我在ConfigureServices
方法中有以下行
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
我從以下文章中了解到了這種技術
這在運行時工作,但我在單元測試中訪問這些設置時遇到困難。
我正在嘗試找到一種方法將appsettings.json中的值放入我的測試項目中,以便我可以將它們傳遞給控制器和服務。
我的測試方法看起來像這樣
[TestMethod]
[TestCategory("Service - Method1")]
public void ServiceMethod1Test()
{
// this compiles but gets null reference exception
var setting1 = App.Settings.Setting1;
var setting2 = App.Settings.Setting2;
var service = new Service(setting1, setting2);
var argument1 = "argument";
var actual = service.Method1(argument1);
var expected = "expected result";
CollectionAssert.AreEqual(expected, actual);
}
[TestMethod]
[TestCategory("Controller - Method1")]
public void ControllerMethod1Test()
{
// how do i create this settings instance?
var settings = ???
var controler = new ValuesController(settings);
var argument1 = "argument";
var actual = controller.Method1(argument1);
var expected = "expected result";
CollectionAssert.AreEqual(expected, actual);
}
我怎樣才能將實現IOptions<MySettings>
的類的實例傳遞給控制器測試的控制器構造函數,我怎樣才能將這些值傳遞給服務測試中的服務方法。
只需參考Options包並使用即可
IOptions<MyOptions> options = Options.Create(new MyOptions()
{
...
});
請參閱此處獲取源代碼參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.