Aracılığıyla paylaş


MSTest'i yapılandırma

MSTest, Microsoft Testing Framework, .NET uygulamaları için bir test çerçevesidir. Testleri yazmanıza ve yürütmenize olanak tanır ve test paketlerine Visual Studio ve Visual Studio Code Test Explorers, .NET CLI ve birçok CI işlem hattıyla tümleştirme sağlar.

MSTest, GitHub'da barındırılan tüm desteklenen .NET hedefleri (.NET Framework, .NET Core, .NET, UWP, WinUI vb.) ile çalışan tam olarak desteklenen, açık kaynak ve platformlar arası bir test çerçevesidir.

Çalıştırma ayarları

Birim testlerinin nasıl çalıştırıldığını yapılandırmak için bir .runsettings dosyası kullanılabilir. Çalıştırma ayarları ve platformla ilgili yapılandırmalar hakkında daha fazla bilgi edinmek için VSTest runsettings belgelerine veya MSTest runner runsettings belgelerine göz atabilirsiniz.

MSTest öğesi

Aşağıdaki runsettings girdileri MSTest'in nasıl davranacağını yapılandırmanıza olanak sağlar.

Yapılandırma Varsayılan Değerler
MontajTemizlemeZaman Aşımı 0 Her bir montaj temizleme yöntemi örneğine uygulanacak zaman aşımını genel olarak belirtin. [Timeout] derleme temizleme yönteminde belirtilen öznitelik genel zaman aşımını geçersiz kılar.
AssemblyInitializeTimeout 0 Derleme başlatma yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin. [Timeout] derleme başlatma yönteminde belirtilen öznitelik genel zaman aşımını geçersiz kılar.
AssemblyResolution yanlış Birim testlerini bulup çalıştırırken ek montajların yollarını belirleyebilirsiniz. Örneğin, test derlemesi ile aynı dizinde olmayan bağımlılık derlemeleri için bu yolları kullanın. Yol belirtmek için Dizin Yolu öğesi kullanın. Yollar ortam değişkenlerini içerebilir.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Bu özellik yalnızca .NET Framework hedefi kullanılırken uygulanır.
CaptureTraceOutput doğru Çalışmakta olan teste ilişkilendirilecek, Console.Write*, Trace.Write* ve Debug.Write* API'lerinden gelen kısa mesajları yakalayın.
ClassCleanupLifecycle EndOfClass Sınıf temizleme işleminin derlemenin sonunda gerçekleşmesini istiyorsanız EndOfAssembly olarak ayarlayın. (MSTest v4'ten itibaren artık desteklenmeyen, varsayılan ve tek ClassCleanup davranışı olarak EndOfClass)
ClassCleanupTimeout 0 Sınıf temizleme yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin. [Timeout] sınıf temizleme yönteminde belirtilen öznitelik genel zaman aşımını geçersiz kılar.
ClassInitializeTimeout 0 Sınıf başlatma yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin. [Timeout] sınıf başlatma yönteminde belirtilen öznitelik genel zaman aşımını geçersiz kılar.
MontajlarıÖzelTestlerOlarakDüşün yanlış Visual Studio ve Visual Studio Code AssemblyInitialize ile AssemblyCleanup.trx günlüğünde ClassInitialize, ClassCleanup, Test Explorer, öğelerini tek tek girdiler olarak görüntülemek için bu değeri true olarak ayarlayın.
Test Çalışması Tamamlandığında Dağıtım Dizini Silinsin doğru Bir test çalıştırmasının ardından dağıtım dizinini korumak için bu değeri false olarak ayarlayın.
DağıtımEtkinleştirildi doğru Değeri false olarak ayarlarsanız, test yönteminizde belirttiğiniz dağıtım öğeleri dağıtım dizinine kopyalanmamıştır.
DeployTestSourceDependencies doğru Test kaynağı başvurularının dağıtılıp dağıtılmayacağını gösteren değer.
Diğer Derlemelerden Taban Sınıf Test Metotlarını Etkinleştir doğru Devralan test sınıfından farklı bir derlemedeki temel sınıflardan test yöntemlerinin bulunup bulunmayacağını belirten bir değer.
ForcedLegacyMode yanlış Visual Studio'nun eski sürümlerinde, MSTest bağdaştırıcısı daha hızlı ve daha ölçeklenebilir hale getirmek için iyileştirilmiştir. Testlerin çalışma sırası gibi bazı davranışlar Visual Studio'nun önceki sürümlerindekiyle aynı olmayabilir. Eski test bağdaştırıcısını kullanmak için değeri true olarak ayarlayın.

Örneğin, birim testi için belirtilen bir app.config dosyanız varsa bu ayarı kullanabilirsiniz.

Daha yeni bağdaştırıcı kullanmanıza olanak vermek için testlerinizi yeniden düzenlemenizi öneririz.
BelirsizlikleriBaşarısızlıklaEşle yanlış Bir test, sonuçsuz bir durumla tamamlanırsa, Test Gezgini'nde atlanan durumla eşlenir. Başarısız testlerin başarısız olarak gösterilmesini istiyorsanız değeri true olarak ayarlayın.
ÇalıştırılamayanHaritayıBaşarısızOlarakİşaretle doğru Çalıştırılamayan bir sonucun başarısız testle eşlenip eşlenmediğini gösteren değer.
Sınıftaki Testleri Ada Göre Sırala yanlış Testleri hem Test Gezgini'nde hem de komut satırında test adlarına göre çalıştırmak istiyorsanız, bu değeri true olarak ayarlayın.
Paralelleştirme Paralelleştirme ayarlarını ayarlamak için kullanılır:

Çalışanlar: Paralelleştirme için kullanılacak iş parçacığı/çalışan sayısıdır ve varsayılan olarak geçerli makinedeki işlemci sayısıdır.

KAPSAM: Paralelleştirmenin kapsamı. Bunu MethodLevel olarak ayarlayabilirsiniz. Varsayılan olarak ClassLevel'dır.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
AyarlarDosyası BURADA MSTest bağdaştırıcısıyla kullanılacak bir test ayarları dosyası belirtebilirsiniz. Ayrıca, ayarlar menüsünden bir test ayarları dosyası belirtebilirsiniz.

Bu değeri belirtirseniz, ForcedLegacyMode değerini true olarak ayarlamanız gerekir.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Test temizleme yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin. [Timeout] test temizleme yönteminde belirtilen öznitelik genel zaman aşımını geçersiz kılar.
TestInitializeTimeout 0 Test başlatma yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin. [Timeout] test başlatma yönteminde belirtilen öznitelik genel zaman aşımını geçersiz kılar.
TestTimeout 0 Belirtilen genel test durumu zaman aşımını alır.
SınıfVeBütünleştirilmişMontajTemizlemeUyarılarınıHatalarOlarakEleAl yanlış Sınıf temizlemelerindeki hatalarınızı hata olarak görmek için bu değeri true olarak ayarlayın.
Keşif Uyarılarını Hatalar Olarak Ele Al yanlış Test bulma uyarılarını hata olarak bildirmek için bu değeri true olarak ayarlayın.

TestRunParameter öğesi

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Test çalıştırması parametreleri, çalışma zamanında testlerin kullanabileceği değişkenleri ve değerleri tanımlamanın bir yolunu sağlar. MSTest TestContext.Properties özelliğini kullanarak parametrelere erişin:

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Test çalıştırması parametrelerini kullanmak için test sınıfınıza bir ortak TestContext özellik ekleyin.

Örnek .runsettings dosyası

Aşağıdaki XML, tipik bir .runsettings dosyasının içeriğini gösterir. Bu kodu kopyalayın ve gereksinimlerinize uyacak şekilde düzenleyin.

Dosyanın her öğesi, varsayılan bir değere sahip olduğundan isteğe bağlıdır.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at runtime -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

Testlerinizi MSTest ile çalıştırırken, test çalıştırıcısının davranışını yapılandırmak için bir testconfig.json dosyası kullanabilirsiniz. testconfig.json dosyası, test çalıştırıcısının yapılandırma ayarlarını içeren bir JSON dosyasıdır. Dosya, test çalıştırıcısını ve test yürütme ortamını yapılandırmak için kullanılır. Daha fazla bilgi için Microsoft.Testing.Platform testconfig.json belgelerine bakın.

MSTest 3.7'den başlayarak, MSTest çalıştırmalarını aynı yapılandırma dosyasında da yapılandırabilirsiniz. Aşağıdaki bölümlerde, testconfig.json dosyasında kullanabileceğiniz ayarlar açıklanmaktadır.

MSTest öğesi

MSTest ayarları, izleyen bölümlerde açıklanan işlevlere göre gruplandırılır.

Giriş Varsayılan Açıklama
SınıftaTestleriAdaGöreSırala yanlış Testleri hem Test Gezgini'nde hem de komut satırında test adlarına göre çalıştırmak istiyorsanız, bu değeri true olarak ayarlayın.
Diğer Derlemelerden Taban Sınıf Test Metotlarını Etkinleştir doğru Devralan test sınıfından farklı bir derlemedeki temel sınıflardan test yöntemlerinin bulunup bulunmayacağını belirten bir değer.
classCleanupLifecycle Montajın Sonu Sınıf temizleme işleminin sınıfın sonunda gerçekleşmesini istiyorsanız, bunu EndOfClass olarak ayarlayın.

assemblyResolution ayarları

Bu bölümdeki tüm ayarlar assemblyResolution öğesine aittir.

Giriş Varsayılan Açıklama
Yollar Hiç kimse Birim testlerini bulup çalıştırırken ek montajların yollarını belirleyebilirsiniz. Örneğin, test derlemesi ile aynı dizinde olmayan bağımlılık derlemeleri için bu yolları kullanın. { "path": "...", "includeSubDirectories": "true/false" }şekilde bir yol belirtebilirsiniz.

Örnek:

{
  "mstest": {
    "assemblyResolution": {
        { "path": "...", "includeSubDirectories": "true/false" }
    }
  }
}

deployment ayarları

Bu bölümdeki tüm ayarlar deployment öğesine aittir.

Giriş Varsayılan Açıklama
TestÇalışmasıTamamlandığındaDağıtımDizininiSil doğru Bir test çalıştırmasının ardından dağıtım dizinini korumak için bu değeri false olarak ayarlayın.
TestKaynakBağımlılıklarınıYükle doğru Test kaynağı referanslarının dağıtılıp dağıtılmayacağını belirtir.
Aktif doğru Değeri false olarak ayarlarsanız, test yönteminizde belirttiğiniz dağıtım öğeleri dağıtım dizinine kopyalanmamıştır.

Örnek:

{
  "mstest": {
    "deployment": {
        "deleteDeploymentDirectoryAfterTestRunIsComplete": true,
        "deployTestSourceDependencies": true,
        "enabled": true
    }
  }
}

output ayarları

Bu bölümdeki tüm ayarlar output öğesine aittir.

Giriş Varsayılan Açıklama
captureTrace doğru Çalışmakta olan teste ilişkilendirilecek, Console.Write*, Trace.Write* ve Debug.Write* API'lerinden gelen kısa mesajları yakalayın.

Örnek:

{
  "mstest": {
    "output": {
        "captureTrace": false
    }
  }
}

parallelism ayarları

Bu bölümdeki tüm ayarlar parallelism öğesine aittir.

Giriş Varsayılan Açıklama
Aktif yanlış Test paralelleştirmesini etkinleştirin.
kapsam sınıf Paralelleştirmenin kapsamı. methodolarak ayarlayabilirsiniz. varsayılan class, belirli bir sınıfın tüm testlerini sırayla ancak birden çok sınıfın paralel olarak çalıştırılmasına karşılık gelir.
Işçi 0 Paralelizasyon için kullanılacak iş parçacığı/çalışan sayısı. Varsayılan değer, geçerli makinedeki işlemci sayısına karşılık gelir.

Örnek:

{
  "mstest": {
    "parallelism": {
        "enabled": true,
        "scope": "method",
        "workers": 32
    }
  }
}

execution ayarları

Bu bölümdeki tüm ayarlar execution öğesine aittir.

Giriş Varsayılan Açıklama
BoşVeriKaynağınıSonuçsuzKabulEt yanlış trueolarak ayarlandığında, boş bir veri kaynağı yetersiz olarak kabul edilir.
fikstürleriÖzelTestlerOlarakDüşün yanlış AssemblyInitialize, AssemblyCleanup, ClassInitializeve ClassCleanup 'ü Visual Studio ve Visual Studio Code Test Explorer ve .trx günlüğünde tek tek girdiler olarak görüntülemek için, bu değeri trueolarak ayarlayın.
BelirsizSonucuBaşarısızOlarakEşle yanlış Bir test, sonuçsuz bir durumla tamamlanırsa, Test Gezgini'nde atlanan durumla eşlenir. Başarısız testlerin başarısız olarak gösterilmesini istiyorsanız değeri true olarak ayarlayın.
ÇalıştırılamayanHaritayıBaşarısızaÇevir doğru Çalıştırılamayan bir sonucun başarısız testle eşlenip eşlenmediğini gösteren değer.
Sınıf ve Bütünleştirilmiş Yapı Temizleme Uyarılarını Hatalar Olarak İşle yanlış Sınıf temizlemelerindeki hatalarınızı hata olarak görmek için bu değeri true olarak ayarlayın.
Keşif Uyarılarını Hatalar Olarak Ele Al yanlış Test bulma uyarılarını hata olarak bildirmek için bu değeri true olarak ayarlayın.

Örnek:

{
  "mstest": {
    "execution": {
        "considerEmptyDataSourceAsInconclusive": false,
        "considerFixturesAsSpecialTests": false,
        "mapInconclusiveToFailed": true,
        "mapNotRunnableToFailed": true,
        "treatClassAndAssemblyCleanupWarningsAsErrors": false,
        "treatDiscoveryWarningsAsErrors": false
    }
  }
}

timeout ayarları

Bu bölümdeki tüm ayarlar timeout öğesine aittir.

Giriş Varsayılan Açıklama
montaj temizliği 0 Her bir montaj temizleme yöntemi örneğine uygulanacak zaman aşımını genel olarak belirtin.
bütünleştirmeBaşlat 0 Derleme başlatma yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin.
sınıfTemizle 0 Sınıf temizleme yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin.
sınıfBaşlat 0 Sınıf başlatma yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin.
deneme 0 Genel olarak test zaman aşımını belirtin.
testCleanup 0 Test temizleme yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin.
testInitialize 0 Test başlatma yönteminin her örneğine uygulanacak zaman aşımını genel olarak belirtin.
useKooperatifİptal yanlış trueolarak ayarlandığında, zaman aşımı durumunda MSTest yalnızca CancellationToken iptalini tetikler ancak yöntemi gözlemlemeyi durdurmaz. Bu davranış daha yüksek performanslıdır, ancak belirteci doğru bir şekilde tüm yollar boyunca iletmek için kullanıcıya dayanır.

Not

Bir yöntemde belirtilen [Timeout] özniteliği genel zaman aşımını geçersiz kılar. Örneğin, [AssemblyCleanup] ile işaretlenmiş bir yöntemdeki [Timeout(1000)] genel assemblyCleanup zaman aşımını geçersiz kılar.

Örnek:

{
  "mstest": {
    "timeout": {
        "assemblyCleanup": 0,
        "assemblyInitialize": 0,
        "classCleanup": 0,
        "classInitialize": 0,
        "test": 0,
        "testCleanup": 0,
        "testInitialize": 0,
        "useCooperativeCancellation": false
    }
  }
}

Örnek testconfig.json dosyası

Aşağıdaki JSON, tipik bir .testconfig.json dosyasının içeriğini gösterir. Bu kodu kopyalayın ve gereksinimlerinize uyacak şekilde düzenleyin.

Dosyanın her öğesi, varsayılan bir değere sahip olduğundan isteğe bağlıdır.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}