[英]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.