MSTest SDK yapılandırması

Bu makale, MSTest.Sdk için gelişmiş yapılandırma seçeneklerini kapsar. Temel kurulum ve başlangıç için bkz. MSTest ile Başlarken.

Önemli

Varsayılan olarak MSTest.Sdk, dotnet testi de dahil olmak üzere MTP ile MSTest çalıştırıcısını kullanır. Bunun için CI ve yerel CLI çağrılarınızın değiştirilmesi gerekir ve . runsettings'in kullanılabilir girdilerini de etkiler. VSTest'e geçerek eski tümleştirmeleri ve araçları koruyabilirsiniz.

MSTest.Sdk varsayılan olarak EnableMSTestRunner ve TestingPlatformDotnetTestSupport değerlerini true olarak ayarlar. dotnet testi ve farklı modları hakkında daha fazla bilgi için dotnet testi kullanarak test etme bölümüne bakın.

Yardımcı araç kütüphanelerini test etme

MSTest.Sdk kullanan proje bir test yardımcı kitaplığı olması amaçlanıyor ve kendi başına çalıştırılabilir testler içermiyorsa, proje <IsTestApplication>false</IsTestApplication> olmalıdır.

Koşucuyu seçin

Varsayılan olarak, MSTest SDK'sı MTP'ye dayanır, ancak özelliğini ekleyerek <UseVSTest>true</UseVSTest> geçebilirsiniz.

MTP'nin kapsamını genişletme

Bir dizi NuGet paket uzantısı aracılığıyla MTP deneyimini özelleştirebilirsiniz. Bu deneyimi basitleştirmek ve geliştirmek için MSTest SDK'sı iki özellik sunar:

Microsoft.Testing.Platform profili

profiles kavramı, test project uygulanacak varsayılan yapılandırma ve uzantı kümesini seçmenize olanak tanır.

Özelliği TestingExtensionsProfile kullanarak aşağıdaki üç profilden birini seçip profili ayarlayabilirsiniz:

  • None - Hiçbir uzantı etkinleştirilmedi.

  • Default - MSTest.SDK'nın bu sürümü için önerilen uzantıları etkinleştirir. Özellik açıkça ayarlı olmadığında bu varsayılan değerdir.

    Aşağıdaki uzantıları etkinleştirir:

  • AllMicrosoft - Kısıtlayıcı lisansa sahip uzantılar da dahil olmak üzere, kutudan çıktığı gibi yaygın kullanım için seçilen Microsoft uzantılarını etkinleştirir. Deneysel ve yalnızca API uzantıları yine de açık kabul gerektirebilir.

    Default profilindeki tüm uzantıları ve ayrıca aşağıdaki uzantıları etkinleştirir:

    MSTest.Sdk 3.11.0 ile 4.2.x arasındaki sürümlerde Azure DevOps Report uzantısı yalnızca AllMicrosoft içinde yer alır.

Uyarı

Profiller Azure DevOps Raporuna ve GitHub Actions Rapor paketlerine başvurur, ancak raporlama çalışma zamanında devre dışı kalır. Azure DevOps raporlamasını etkinleştirmek için --report-azdo değerini iletin. GitHub Actions raporlamasını etkinleştirmek için testleri GitHub Actions'ta çalıştırın ve --report-gh öğesini iletin.

İşte None profilinin kullanıldığı tam bir örnek:

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

</Project>
Eklenti/Profil Hiç kimse Varsayılan AllMicrosoft
Kod Kapsamı ✔️ ✔️
kilitlenme dökümü ✔️
Fakes ✔️¹
Askı Dökümü ✔️
Anında Yeniden Yükleme ✔️
HTML Raporu ✔️
GitHub Actions Raporu ✔️³ ✔️³
Yeniden Dene ✔️
Trx ✔️ ✔️
raporu Azure DevOps ✔️³ ✔️²

¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+

Uzantıları etkinleştirme veya devre dışı bırakma

Uzantılar, deseni Enable[NugetPackageNameWithoutDots]ile MSBuild özellikleri tarafından etkinleştirilebilir ve devre dışı bırakılabilir.

Örneğin, kilitlenme dökümü uzantısını etkinleştirmek için (NuGet paketi Microsoft.Testing.Extensions.CrashDump), aşağıdaki EnableMicrosoftTestingExtensionsCrashDump değerini true olarak ayarlayabilirsiniz:

<Project Sdk="MSTest.Sdk/4.1.0">

<PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

</Project>

Kullanılabilir tüm uzantıların listesi için bkz. MTP özellikleri.

Bazı MTP uzantıları isteğe bağlı olmaya devam eder ve AllMicrosoft veya Default profillerine dahil değildir:

  • MSTest.Sdk 4.3’ten itibaren <EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport> ayarlayın, ardından --report-junit geçirin.
  • MSTest.Sdk 4.4 önizlemesinden itibaren <EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport> ayarlayın, ardından --report-ctrf iletin.
  • OpenTelemetry uzantısına başvurmak için <EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry> olarak ayarlayın. Uzantı API yapılandırması gerektirdiğinden, OpenTelemetry'de açıklandığı gibi özel giriş noktanıza kaydedin.

Bu uzantılar yalnızca MTP ile kullanılabilir.

Uyarı

Farklılık gösterebileceğinden her uzantının lisans koşullarını gözden geçirmek önemlidir.

Etkin ve devre dışı bırakılmış uzantılar, seçtiğiniz uzantı profili tarafından sağlanan uzantılarla birleştirilir.

Örtük Default profilinin üzerinde ek bir uzantı etkinleştirmek için bu özellik deseni kullanılabilir (önceki CrashDumpExtension örneğinde görüldüğü gibi).

Seçili profilden gelen bir uzantıyı da devre dışı bırakabilirsiniz. Örneğin, MS Code Coverage uzantısını devre dışı bırakmak için <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage> ayarını yapın.

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

</Project>

MSTest.Sdk 4.3.0 ve sonraki sürümlerde profil, Default Azure DevOps Raporu ve GitHub Actions Rapor paketlerine başvurur. Paket başvurularından herhangi birini kaldırmak için <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport> veya <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> olarak ayarlayın. Paket başvurularını korursanız, Azure DevOps raporlaması yalnızca --report-azdo parametresini ilettiğinizde başlar. GitHub Actions raporlaması yalnızca testleri GitHub Actions üzerinde çalıştırdığınızda ve --report-gh geçirdiğinizde başlar.

Özellikler

Seçilen koşucu ve koşucuya özgü uzantıların ötesinde, MSTest.Sdk test deneyiminizi basitleştirmek ve geliştirmek için ek özellikler de sunar.

Test edin ile

Aspire gözlemlenebilir, üretime hazır, dağıtılmış uygulamalar oluşturmaya yönelik, fikir temelli, buluta hazır bir yığındır. Aspire, belirli buluta özgü sorunları ele almak için bir NuGet paketi koleksiyonu aracılığıyla sağlanır. Daha fazla bilgi için belgelereAspire bakın.

Uyarı

Bu özellik MSTest.Sdk 3.4.0'dan kullanılabilir.

Özelliği EnableAspireTesting olarak true ayarlayarak, using ve Aspire ile test etmek için ihtiyacınız olan tüm bağımlılıkları ve varsayılan MSTest yönergelerini getirebilirsiniz.

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

</Project>

Playwright ile test et

Playwright, modern web apps için güvenilir uçtan uca test olanağı sağlar. Daha fazla bilgi için resmi Playwright belgelerine bakın.

Uyarı

Bu özellik MSTest.Sdk 3.4.0'dan kullanılabilir.

Özelliği EnablePlaywright olarak ayarlayarak, true ile using için gerekli olan tüm bağımlılıkları ve varsayılan Playwright yönergelerini MSTest ile test etmek amacıyla ekleyebilirsiniz.

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

</Project>

MSTest SDK'sına geçiş

MSTest SDK'sına geçiş yapmak için gereken aşağıdaki adımları göz önünde bulundurun.

Projenizi güncelleyin

Mevcut bir MSTest test projesini MSTest SDK'sına geçirirken, test projenizin üst kısmındaki Sdk="Microsoft.NET.Sdk" girişini Sdk="MSTest.Sdk" ile değiştirerek başlayın

- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"

global.json sürümünüze ekleyin:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "4.1.0"
    }
}

Daha sonra project basitleştirmeye başlayabilirsiniz.

Varsayılan özellikleri kaldır:

- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>

Varsayılan paket atıflarını kaldır.

- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"

Son olarak, kullandığınız uzantı profiline bağlı olarak, Microsoft.Testing.Extensions.* paketlerinden bazılarını da kaldırabilirsiniz.

CI'nizi güncelleştirme

Projelerinizi güncelleştirdikten sonra, MTP (varsayılan) kullanıyorsanız ve testlerinizi çalıştırmaya güveniyorsanız dotnet test CI yapılandırmanızı güncelleştirmeniz gerekir. Daha fazla bilgi edinmek ve gerekli tüm değişiklikleri anlamanızı sağlamak için bkz: dotnet test tümleştirmesi.

dotnet test VSTest modunu kullanıyorsanız, Azure DevOps'da DotNetCoreCLI görevi kullanılırken örnek bir güncelleştirme aşağıda verilmiştir:

Varsayılan MSTest.Sdk uzantı profili, eklenen seçeneklerin gerektirdiği Microsoft.Testing.Extensions.TrxReport ve Microsoft.Testing.Extensions.CodeCoverage paketlerini sağlar. None profilini seçerseniz, seçenekleri kullanmadan önce her iki uzantıyı da etkinleştirin veya bunlara başvurun.

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'

Yansıma kaynağı oluşturucu

Önemli

Aşağıdaki MSTest 4.4 davranışı, MSTest 4.4.0 yayımlanana kadar yalnızca önizleme derlemelerinde kullanılabilir.

MSTest 4.3, bağımsız olarak sürümlenmiş deneysel MSTest.SourceGeneration pakette yansıma kaynağı oluşturucuyu tanıttı. MSTest 4.4'ten başlayarak paket deneysel durumdan mezun olup MSTest sürümünü kullanır.

Yerel AOT projeleri otomatik olarak kaynak oluşturucuyu içerir. MSTest.Sdk kullanan NativeAOT olmayan bir proje için, <EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration> ekleyerek bunu etkinleştirin. MSTest.Sdk, MSTest.SourceGeneration aracılığıyla MSTest.TestFramework, MSTest.TestAdapter ve MSTestVersion sürümlerini hizalar.

SDK, Merkezi Paket Yönetimi kullanan yeniden kullanılabilir test kitaplıklarında ve projelerde kaynak oluşturmayı da destekler. Eşleşen MSTest.TestAdapter çalışma zamanı kancaları sağlar ve gerekli PackageVersion öğeleri oluşturur.

.NET Standard bu çalışma zamanı kancalarını desteklemez. .NET Standart hedefi için kaynak oluşturmayı etkinleştirdiğinizde SDK şu hatayı bildirir:

Gerekli MSTest.TestAdapter çalışma zamanı kancaları kullanılamadığından, MSTest kaynak oluşturma özelliği .NET Standard hedef çerçeveleri için desteklenmez.

Kaynak oluşturucu derleme zamanında testleri bulur. Oluşturucu etkin olduğunda, test sınıfları bunu devralmak yerine [TestClass] öğesini doğrudan bildirmelidir. MSTEST0069 çözümleyicisi, devralınan bir [TestClass] öğesine dayanan sınıfları işaretler.

MSTest 4.3.2'den başlayarak, MSTestSourceGenMode kırpılmış ve Yerel AOT projeleri için varsayılan değer ReflectionFree olarak belirtilir. Bu mod, test şeklini desteklediği yerde oluşturulan meta verileri ve çağırıcıları kullanır. Yansımayı destekleyen çalışma zamanlarında MSTest, desteklenmeyen veya eksik oluşturulmuş girdiler için yansımaya geri döner.

MSTest 4.4'ten itibaren, yansıma gerektirmeyen oluşturma, AttributeUsage ve AllowMultiple de dahil olmak üzere eksiksiz devralınan öznitelik meta verilerini oluşturur. MTP’de, basit eşzamanlı [TestMethod] ve [DataRow] yöntemleri için çalışma zamanı bulma ve doğrulamayı atlayabilir. Asenkron testler, özel test yöntemi öznitelikleri, DynamicData, özel ITestDataSource uygulamaları ve belirsiz test biçimleri yedek yolu kullanır. VSTest ayrıca var olan yolunu korur.

Yansımasız mod şu tanılamaları bildirir:

Kimlik Desteklenmeyen test şekli
AOTSG0001 Statik test sınıfı
AOTSG0002 Jenerik bir tür içinde iç içe yer alan bir sınıf da dahil olmak üzere jenerik test sınıfını açın.
AOTSG0003 Dosya yerel sınıfı veya özel veya özel korumalı iç içe yerleştirme dahil olmak üzere kod oluşturan sınıf erişemiyor
AOTSG0004 Genel test yöntemi
AOTSG0005 in, out veya ref parametreli test yöntemi

Deneysel özellikler

Aşağıdaki MSTest 4.3 özellikleri deneyseldir. Herkese açık API'leri değişikliğe tabidir ve yalnızca deneysel tanılama özellikleri aracılığıyla sunulur. Etkinleştirmek için ilgili tanılama kimliğini onaylayın.

ile programlı test filtreleme ITestFilter

Uyarı

MSTest 4.3.0 (deneysel) ile kullanıma sunulmuştur.

ITestFilter aracılığıyla kaydedilen deneysel [TestFilterProviderAttribute] uzantı noktası, herhangi bir test sınıfı yüklenmeden önce her bir testin çalıştırılıp çalıştırılmayacağına programatik olarak karar vermenizi sağlar. Bu, komut satırı filtreleriyle ifade edilemeyen özel seçim mantığı için kullanışlıdır.

Test sınıfını yüklemeden meta verileri incelemek için uygulayın ITestFilter.Filter(TestFilterContext) :

public sealed class MyFilter : ITestFilter
{
    public TestFilterResult Filter(TestFilterContext context) =>
        context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
            ? TestFilterResult.Run : TestFilterResult.Drop;
}

Testi çalıştırmak, TestFilterResult.Run sonuç olmadan atlamak veya Drop atlanan bir sonucu bildirmek için geri dönünSkip(reason). MSTest bir filtre örneğini eşzamanlı olarak çağırabileceğinden, uygulamaların iş parçacığı açısından güvenli olması gerekir. Komut satırı ve Test Gezgini filtreleri, ITestFilter öğesinden önce uygulanırken [Ignore] ise daha sonra değerlendirilir.

MSTest 4.4'den başlayarak, .NET projeler genel, tür güvenli kayıt formunu [assembly: TestFilterProvider<MyFilter>]kullanabilir. Derleyici daha sonra MyFilter'ın ITestFilter'i uygulamasını ve genel, parametresiz bir oluşturucuya sahip olmasını zorunlu kılar. Genel öznitelik .NET Framework için kullanılamaz. Çok hedefli bir proje için, hedef çerçeve önişlemci simgesiyle genel veya genel olmayan formu seçin.

#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif

MSTest 4.4'den başlayarak , MSTEST0081 çözümleyicisi genel olmayan kayıt formunu tam olarak doğrular. Genel biçim için, hala genel filtre türlerini ve birden fazla sağlayıcıyı kaydeden derlemeleri raporlar.

TestRun.Current ve planlanan testler

Uyarı

MSTest 4.3.0 (deneysel) ile kullanıma sunulmuştur.

Deneysel TestRun.Current API (RFC 014'ten), planlanan testler kümesi de dahil olmak üzere mevcut çalıştırma hakkında bilgi sağlar; böylece uzantılar ve fikstürler çalıştırılması planlananları inceleyebilir.

Bilinen sınırlamalar

NuGet tarafından sağlanan MSBuild SDK'ları (MSTest.Sdk dahil), sürümlerini güncelleştirme konusunda sınırlı araç desteğine sahiptir; bu da NuGet paketlerini yönetmek için sunulan normal NuGet güncellemesinin ve Visual Studio kullanıcı arabiriminin beklendiği gibi çalışmaması anlamına gelir. sürümü global.json dosyasında ve project dosyasında el ile güncelleştirmeniz gerekir. (dependabot-core#12824 ve dependabot-core#8615 sorunları nedeniyle Dependabot kullanıyor olsanız bile bu durum geçerlidir.)

Ayrıca bkz.