Visual Studio 2017'deki bir Visual Basic web projesi için ortam değişkenlerini proje özellikleri sayfasını kullanarak ayarlarsanız, Environment.GetEnvironmentVariable
kullanarak değişkenin değerini okuyabilir; Ancak, xUnit test projem için ortam değişkenini ayarlayıp testte hata ayıkladığımda, Environment.GetEnvironmentVariable
her zaman null değerini döndürür. Değişkenin web projesinde olduğu gibi kullanılmasını engelleyen bir test projesi olmasıyla ilgili bir şey var mı? Öyleyse, bir test projesi için ortam değişkenlerini ayarlayabilmem için bir yol var mı? Teşekkür ederim.GetUnvironmentVariable xUnit Testinde Çalışmalı mı?
cevap
GetEnvironmentVariable
, xUnit testlerinde düzgün çalışıyor. sorunu, bir değişken doğru şekilde ayarlanmasıdır. Değişkeni Properties -> Debug
sayfasında ayarlarsanız, değişken Properties\launchSettings.json
'a yazılır ve Visual Studio, tüm çalışmaların seçilen profille bir uygulama başlatmasını sağlar. Görebildiğiniz gibi, launchSettings.json
, çıktı klasörüne varsayılan olarak kopyalanamaz. Bu dosyayı dotnet run
veya dotnet test
'a argüman olarak iletmek imkansızdır, bu da eğer testler otomatik olarak bir CI sunucusunda çalıştırılırsa bariz bir soruna yol açar. Bu nedenle, launchSettings.json
'un bir test koşucusu tarafından dikkate alınmaması şaşırtıcı değildir.
Çözüm:
- Oluşturucu
- Taban sınıfı
- Fixture
Örneğin, bu koleksiyon fikstürü: kurulum için yollar xUnit bir test ortamı bir yeri vardır tüm ortam değişkenlerini launchSettings.json
:
public class LaunchSettingsFixture : IDisposable
{
public LaunchSettingsFixture()
{
using (var file = File.OpenText("Properties\\launchSettings.json"))
{
var reader = new JsonTextReader(file);
var jObject = JObject.Load(reader);
var variables = jObject
.GetValue("profiles")
//select a proper profile here
.SelectMany(profiles => profiles.Children())
.SelectMany(profile => profile.Children<JProperty>())
.Where(prop => prop.Name == "environmentVariables")
.SelectMany(prop => prop.Value.Children<JProperty>())
.ToList();
foreach (var variable in variables)
{
Environment.SetEnvironmentVariable(variable.Name, variable.Value.ToString());
}
}
}
public void Dispose()
{
// ... clean up
}
}
Dosyayı testlerden erişilebilir hale getirmek için launchSettings.json
için Copy to output directory: Always
değerini ayarlayın.
Harika çözüm @Ilya. Gönderdiğiniz için teşekkürler. LaunchSettings.json dosyasını bile bilmiyordum. – Eric
@Eric, iyi soru için teşekkürler. Aslında test ortamını kurmak için 'launchsettings.json 'kullanmıyoruz. Bunun yerine, basitleştirilmiş bir json anahtar/değer dosyası oluştururuz. Çözümdeki tüm entegrasyon test projeleri için bağlantı olarak paylaşılır. Birden çok ortam/profile sahip olmanız gerekiyorsa, ASP.NET Core'daki 'appsettings.json' için yapılan gibi bir yapılandırma dönüşümü düşünün. –
- 1. XUnit
- 2. Xunit için Parametreli Test Armatürleri Var mı?
- 3. xunit bilgi çıkışına ekle
- 4. xUnit testi bağlam sınıfına
- 5. XUnit kodu engelleyebilir mi?
- 6. Bir birim testinde yapılan baskının bastırılmasının bir yolu var mı?
- 7. AngularJS testinde İletken/XPath'a daha iyi bir alternatif var mı?
- 8. Jenkins xUnit test sonucu raporu
- 9. xUnit framework kullanarak performans testi
- 10. Birim testinde httpcontext kullanma
- 11. Jasmine testinde sahte pencere.location.reload
- 12. Django testinde HTTP_REFERER başlığını ayarlama
- 13. XUnit Nesnelerin eşitliğini denetlemek için onaylama
- 14. AutoFixture'ın AutoData özniteliği Xunit ile atıyor System.InvalidOperationException
- 15. XUnit Testleri artık keşfedilmiyor. Net Core 1.1
- 16. Xunit sınama kitaplığı ile xunit sınaması çalıştırılırken ve Visual Studio 2015 - Yöntem bulunamadı
- 17. $ httpBackend angularjs Yasemin birim testinde
- 18. Bash testinde bileşik koşulların grupları
- 19. xUnit framework: XUnit'te NUnit [TestFixtureSetUp] eşdeğeri?
- 20. xUnit ile Bağımlılık Enjeksiyonu kullanmak mümkün mü?
- 21. xUnit v2 IUseFixture <> yedek
- 22. Xunit testlerini "dotnet test" ile nasıl filtrelersiniz?
- 23. mstest en Assert.Inconclusive ait xUnit eşdeğerdir
- 24. XUnit açıklayıcı Assert mesajı nasıl uygulanır?
- 25. Yerel Birim Testinde Build.VERSION.SDK_INT Stub değeri
- 26. Maven entegrasyonu testinde çalışan iskeleye classpath ekleme
- 27. C# Birim Testinde Type yerine RuntimeType
- 28. RSpec: Bir yardımcı testinde çerezleri ayarlaması
- 29. Bir birim testinde bir başlatıcı kullanılıyor mu?
- 30. JUnit testinde maven özellikleri nasıl alınır?
Lütfen bir test projesi için ortam değişkenlerini nasıl ayarlayacağınızı gösterin. –
@Ilya, Nasıl yapılacağını bilerek ekran görüntüsü ekleyebilirim. Visual Studio 2017'de, birim sınama projesinin Özellikler penceresini açın. Hata Ayıklama sekmesinde, Ortam Değişkenlerini girebileceğiniz bir kılavuz vardır. Web projeme özel bir tane eklediğimde, hata ayıkladığımda okuyabilirim, ancak birim sınama projesinde bir tane belirlediğimde, değer null olarak okunur. – Eric