从应用设置中使用和注入.Json在.net core上的单元测试
本文关键字:net core 单元测试 Json 注入 设置 应用 | 更新日期: 2023-09-27 17:54:30
我创建了一个asp.net核心web应用程序和一个单元测试应用程序。
我使用"ASP. net"创建了asp.net应用程序。. NET核心Web应用程序。. NET Core)模板,并使用"类库(Class Library)"创建了单元测试项目。. NET Core)"模板。
我使用下面文章中的说明配置了MSTest:
宣布MSTest框架支持。net Core RC2/ASP。. NET Core RC2
我已经将应用程序组织到控制器和服务中,控制器从appsettings读取值。
我有一个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中的强类型配置设置网络核心
这在运行时工作,但是我在单元测试中访问这些设置有困难。
我正试图找到一种方法从应用程序设置中获取值。
我的测试方法看起来像这样
[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()
{
...
});
查看这里的源代码参考。