簡體   English   中英

在.net核心的單元測試中使用和注入appsettings.json

[英]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"));

我從以下文章中了解到了這種技術

ASP.NET Core中強類型的配置設置

這在運行時工作,但我在單元測試中訪問這些設置時遇到困難。

我正在嘗試找到一種方法將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM