2016-07-03 14 views
7

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.

Odpowiedz

7

Wystarczy odwołać pakiet Opcje i użyć

IOptions<MyOptions> options = Options.Create(new MyOptions() 
{ 
    ... 
}); 

Zobacz here dla odniesienia kodu źródłowego.

Powiązane problemy