Я создал веб-приложение asp.net core и приложение для тестирования модулей.Использование и впрыскивание из appsettings.json в модульных тестах на ядре .net
Я создал приложение asp.net с использованием шаблона «ASP.NET Core Web Application (.NET Core)» и создал проект модульного тестирования с использованием шаблона «Библиотека классов (.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>
конструктору контроллера для тестирования контроллера, и как я мог бы идти о получении этих ценностей перейти к методам обслуживания в тесте на обслуживание.