在 .net core 上的单元测试中使用和注入 appsettings.json
Posted
技术标签:
【中文标题】在 .net core 上的单元测试中使用和注入 appsettings.json【英文标题】:Using and injecting from appsettings.json in unit tests on .net core 【发布时间】:2016-11-05 10:05:23 【问题描述】:我已经创建了一个 asp.net core web 应用程序和一个单元测试应用程序。
我使用“ASP.NET Core Web 应用程序 (.NET Core)”模板创建了 asp.net 应用程序,并使用“类库 (.NET Core)”模板创建了单元测试项目。
我使用以下文章中的说明配置了 MSTest:
Announcing MSTest Framework support for .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"));
我从下面的文章中了解了这种技术
Strongly Typed Configuration Settings in 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>
用于控制器测试的控制器构造函数,以及如何让这些值传递给服务测试中的服务方法。
【问题讨论】:
Integration test with IOptions<> in .NET Core的可能重复 【参考方案1】:只需引用 Options 包并使用
IOptions<MyOptions> options = Options.Create(new MyOptions()
...
);
请参阅here 获取源代码参考。
【讨论】:
以上是关于在 .net core 上的单元测试中使用和注入 appsettings.json的主要内容,如果未能解决你的问题,请参考以下文章
.NET Core 单元测试 - 模拟 IOptions<T>
.NET Core 的 NUnit Entity Framework 集成测试依赖注入问题
如何在 Bamboo 中运行 .NET Core 单元测试?
如何在 ASP.NET Core 中使用 ILogger 进行单元测试
无法使用 ConfigurationManager 在 C# .NET Core 单元测试项目中读取 app.config