Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bazı testlerin çalışma zamanında test verileri, yapılandırma dosyaları, altın ana dosyalar veya yerel bağımlılıklar gibi ek dosyalara ihtiyacı vardır. Her test çalıştırıldığında test derlemenizin yanında kullanılabilir olması gereken dosya ve klasörleri bildirmek için öğesini DeploymentItemAttribute kullanın.
Genel bakış
[DeploymentItem] bir test sınıfına veya test yöntemine uyguladığınızda MSTest, belirtilen dosya veya klasörleri bu kapsamdaki herhangi bir test çalıştırılmadan önce TestContext.DeploymentDirectory tarafından kullanıma sunulan dizine kopyalar. Dağıtım dizini aynı zamanda test için geçerli çalışma dizinidir, bu nedenle test kodunuz dosyaları kopyalanan adlarıyla açabilir.
özniteliği göreli veya mutlak bir yol kabul eder:
-
Göreli yollar, derleme çıktı dizinine göre çözülür (örneğin, test derlemesinin bulunduğu klasör olan
bin\Debug\net10.0\). - Mutlak yollar olduğu gibi kullanılır.
Important
MSTest 3.x'te, dağıtım öğeleri test çalıştırması başına kopyalanır. Bir dosyayı dağıtım zamanında kullanılabilir hale getirmek için, dosyanın derleme çıktı dizininde zaten var olması (veya kopyalanması) gerekir.
Uygula [DeploymentItem]
Özniteliği bir test yöntemine, test sınıfına veya her ikisine de uygulanabilir. Birden çok örneğe izin verilir ve birleştirilir:
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
[DeploymentItem(@"TestFiles\shared-config.json")]
public class ConfigurationTests
{
[TestMethod]
[DeploymentItem(@"TestFiles\customers.csv")]
public void LoadCustomers_FromCsv_ReturnsAllRows()
{
// Both shared-config.json (from the class) and customers.csv (from
// the method) are available in the deployment directory.
Assert.IsTrue(File.Exists("shared-config.json"));
Assert.IsTrue(File.Exists("customers.csv"));
}
}
Note
Bir test sınıfına uyguladığınızda [DeploymentItem] , sınıfın en az bir test yöntemi içermesi gerekir. Yalnızca AssemblyInitialize veya ClassInitialize yöntemleri olan bir sınıfa uygulanmasının hiçbir etkisi yoktur. Çözümleyici MSTEST0035 bu tür bir kötüye kullanımı işaret eder.
Oluşturucu aşırı yüklemeleri
DeploymentItemAttribute iki oluşturucuya sahiptir: DeploymentItemAttribute(string path) ve DeploymentItemAttribute(string path, string outputDirectory).
DeploymentItemAttribute(string path)
tarafından path tanımlanan dosya veya klasörü dağıtım dizininin köküne kopyalar.
// Copy a single file from the build output directory.
[DeploymentItem("settings.json")]
// Copy a file that lives in a subfolder of the build output directory.
// The file is copied to the root of the deployment directory (the
// "Resources" folder is not preserved).
[DeploymentItem(@"Resources\test-data.xml")]
// Copy the entire TestFiles folder (and all of its subfolders) into the
// deployment directory.
[DeploymentItem("TestFiles")]
DeploymentItemAttribute(string path, string outputDirectory)
Öğeleri, outputDirectory ile belirtilen dağıtım dizininin bir alt dizinine kopyalar.
// Creates a "Data" subfolder under the deployment directory, then copies
// test-data.xml into it. The file is reached at "Data\test-data.xml".
[DeploymentItem("test-data.xml", "Data")]
// Copies the contents of the Resources folder into a "Resources"
// subfolder of the deployment directory.
[DeploymentItem("Resources", "Resources")]
outputDirectory bağımsız değişkeni bir klasör yolu olmalıdır. Dosyayı yeniden adlandırmak için kullanılamaz. Farklı bir ada sahip bir dosyayı dağıtmak için, dosyayı kaynak klasörde yeniden adlandırın (veya derleme sonrası adım kullanın).
Kaynak dosyaların derleme çıktı dizinine ulaştığından emin olun
Göreli yollar derleme çıktı dizinine göre çözümlenmiş olduğundan, kaynak dosya veya klasör zaten orada olmalıdır. Bunu başarmanın iki yaygın yolu vardır.
CopyToOutputDirectory ile <None> veya <Content> kullanın
Dosyaları test projenize ekleyin ve derleme çıktı dizinine kopyalamak için işaretleyin:
<ItemGroup>
<None Update="TestFiles\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
Bir derlemeden sonra, TestFiles klasörü bin\<Configuration>\<TargetFramework>\TestFiles\ içinde çoğaltılır ve [DeploymentItem("TestFiles")] doğru şekilde çözümlenir.
Derleme sonrası hedef kullanın
Test projesinin dışında yaşayan dosyalar için bunları derlemenin bir parçası olarak derleme çıktı dizinine kopyalayın:
<Target Name="CopySharedAssets" AfterTargets="Build">
<Copy SourceFiles="@(SharedAsset)"
DestinationFolder="$(OutDir)SharedAssets\" />
</Target>
Çalışma zamanında dağıtım dizinini inceleme
Dağıtım dizininin mutlak yoluna ihtiyacınız varsa — örneğin, bunu başlattığınız bir işleme iletmek veya tanılama amacıyla günlüğe kaydetmek için — TestContext.DeploymentDirectory öğesini kullanın:
using System.IO;
[TestMethod]
[DeploymentItem(@"TestFiles\input.json")]
public void ProcessInput_FromDeployedFile_Succeeds()
{
string fullPath = Path.Combine(TestContext.DeploymentDirectory, "input.json");
string contents = File.ReadAllText(fullPath);
// ...
}
TestContext hakkında daha fazla bilgi için bkz. TestContext sınıfı.
Dağıtım gerçekleşmediğinde
Varsayılan olarak, MSTest bir çalıştırma başına dağıtım dizini oluşturur ve öğeleri bu dizine kopyalar. Bir dosyada .runsettings dağıtımı devre dışı bırakabilirsiniz, böylece testler doğrudan derleme çıktı dizininden çıkarılır:
<RunSettings>
<MSTest>
<DeploymentEnabled>False</DeploymentEnabled>
</MSTest>
</RunSettings>
Dağıtım devre dışı bırakıldığında özniteliklerin [DeploymentItem] hiçbir etkisi olmaz ve test derleme çıkış dizininde çalışır. Daha fazla yapılandırma seçeneği için bkz. MSTest'i yapılandırma.
Eski mod ve .testsettings
MSTest eski modda çalıştığında (.testsettings dosyası kullanılırsa veya bir .runsettings dosyasında RunSettings/MSTest/ForcedLegacyMode, true olarak ayarlanmışsa), göreli yollar derleme çıktısı dizini yerine çözümün kök dizinine göre çözümlenebilir. Yeni projeler için eski moddan kaçının; önerilen yaklaşım modern .runsettingstabanlı yapılandırmadır.
En iyi uygulamalar
- Derin göreli yollar yerine
CopyToOutputDirectorytercih edin. Stil yolları olan..\..\kaynak klasörlere erişmeyin; bunlar testlerinizi belirli bir depo düzenine bağlar. Önce derleme çıktısı dizinindeki dosyaları hazırlayın. - Dağıtım öğelerini küçük tutun. Her öğe her test çalıştırması için kopyalanır; büyük dosyalar test yürütmeyi yavaşlatır.
- İlgili varlıkları birlikte dağıtmak için klasörleri kullanın.
[DeploymentItem("TestFiles")]onlarca dosya başına özniteliği korumaktan daha kolaydır. - Küçük fikstürler için ekli kaynakları veya bellek içi verileri tercih edin. Gömülü kaynaklar, dağıtım ihtiyacını ortadan kaldırır ve test sırasında G/Ç yapılmasını önler.
- Çalışma dizininin proje dizini olmasına güvenmeyin. Test yürütme sırasında çalışma dizini, test projesi klasörü değil dağıtım dizinidir.