Stworzyłem podstawową aplikację webową asp.net i aplikację testową jednostki.Używanie i wstrzykiwanie z appsettings.json w testach jednostkowych w rdzeniu .net
Utworzono aplikację asp.net przy użyciu szablonu "Aplikacja ASP.NET Core Web Application (.NET Core)" i utworzyłem projekt testowy jednostki, korzystając z szablonu "Biblioteka klas (.NET Core)".
skonfigurowałem MSTest korzystając z instrukcji na poniższym artykule:
Announcing MSTest Framework support for .NET Core RC2/ASP.NET Core RC2
mam zorganizowanego aplikację do kontrolerów i Usług, kontrolery odczytać wartości z appsettings.json i przekazać je do metod eksploatacji jako argumenty.
Mam klasy AppSettings następująco
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;
}
}
Konstruktor kontroler jest następujący
public ValuesController(IOptions<AppSettings> settings)
{
App.ConfigureSettings(settings);
}
W Startup.cs że ma następującą linię sposobu ConfigureServices
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
O tej technice dowiedziałem się z następującego artykułu
Strongly Typed Configuration Settings in ASP.NET Core
Działa to w czasie wykonywania, ale mam problemy z dostępem do tych ustawień w moich testów jednostkowych.
Próbuję znaleźć sposób na przeniesienie wartości z appsettings.json do mojego projektu testowego, dzięki czemu mogę przekazać je kontrolerom i usługom.
Moje metody badań wyglądać następująco
[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);
}
Jak mogę iść o przejściu instancję klasy, która implementuje IOptions<MySettings>
do konstruktora kontrolera do testów kontrolerów i jak mogę iść o uzyskanie tych wartości przejść na metody serwisowe w testach serwisowych.