gpt4 book ai didi

c# - 在 .net core 的单元测试中使用和注入(inject) appsettings.json

转载 作者:太空狗 更新时间:2023-10-29 20:19:47 26 4
gpt4 key购买 nike

我已经创建了一个 asp.net 核心 Web 应用程序和一个单元测试应用程序。

我使用“ASP.NET Core Web 应用程序 (.NET Core)”模板创建了 asp.net 应用程序,并使用“类库 (.NET Core)”模板创建了单元测试项目。

我使用以下文章中的说明配置了 MSTest:

Announcing MSTest Framework support for .NET Core RC2 / ASP.NET Core RC2

我已将应用程序组织成 Controller 和服务, Controller 从 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;
}
}

Controller 构造函数如下

public ValuesController(IOptions<AppSettings> settings)
{
App.ConfigureSettings(settings);
}

在 Startup.cs 中,我在 ConfigureServices 中有以下行方法

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

我是从下面的文章中了解到这个技术的

Strongly Typed Configuration Settings in ASP.NET Core

这在运行时有效,但我在单元测试中访问这些设置时遇到困难。

我正在尝试找到一种方法,将值从 appsettings.json 获取到我的测试项目中,以便我可以将它们传递给 Controller ​​和服务。

我的测试方法是这样的

[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>到 Controller 测试的 Controller 构造函数,以及我如何才能将这些值传递给服务测试中的服务方法。

最佳答案

只需引用 Options 包并使用

IOptions<MyOptions> options = Options.Create(new MyOptions()
{
...
});

参见 here供源代码引用。

关于c# - 在 .net core 的单元测试中使用和注入(inject) appsettings.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38171748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com