2016-07-03 22 views
7

Asp.net çekirdek web uygulaması ve birim testi uygulaması oluşturdum..net core biriminde birim testlerde appsettings.json öğesinin kullanımı ve enjekte edilmesi

"ASP.NET Çekirdek Web Uygulaması (.NET Çekirdeği)" şablonunu kullanarak asp.net uygulamasını oluşturdum ve "Sınıf Kitaplığı (.NET Çekirdeği)" şablonunu kullanarak birim sınama projesini oluşturdum.

aşağıdaki makaledeki talimatları kullanarak mstest yapılandırılmış: Ben Kontrolörleri ve Hizmetlerin içine uygulamayı düzenledik

Announcing MSTest Framework support for .NET Core RC2/ASP.NET Core RC2

, kontrolörler appsettings.json değerleri okumak ve olarak hizmet yöntemlerine bunlar geçecek argümanlar. Startup.cs olarak

public ValuesController(IOptions<AppSettings> settings) 
{    
    App.ConfigureSettings(settings); 
} 

aşağıdaki şekilde kontrol yapıcı I ConfigureServices yöntemde aşağıdaki satırı vardır olan

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; 
    } 
} 

aşağıdaki gibi

Bir AppSettings'i sınıfı

services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 

Bu tekniği aşağıdaki yazıda öğrendim

Strongly Typed Configuration Settings in ASP.NET Core

Bu çalışma zamanında çalışır, ama benim birim testlerinde bu ayarları erişme konusunda sıkıntılar var.

Appsettings.json değerlerini sınama projem içine almanın bir yolunu bulmaya çalışıyorum, böylece bunları denetleyicilere ve hizmetlere iletebilirim.

Benim test yöntemleri ben kontrolör testler için kontrolör kurucusuna IOptions<MySettings> uygulayan bir sınıfın örneğini geçen hakkında gidebiliriz Bu nasıl

[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); 
} 

şuna benzer, ben bu değerleri alma hakkında nasıl gidebiliriz Hizmet testlerinde hizmet yöntemlerine geçmek.

cevap

7

Sadece Seçenekler paketini referans ve

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

kaynak kod başvuru için here Bkz kullanın.

İlgili konular