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üzenledikAnnouncing 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.