Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
MSTest poskytuje atributy pro uspořádání testů, přidávání metadat a propojení testů s systémy sledování práce. Tyto atributy pomáhají efektivně filtrovat, řadit a spravovat testy ve velkých sadách testů.
Přehled
Atributy metadat se zobrazí v okně Vlastnosti sady Visual Studio pro testovací metody. Pomáhají vám:
- Uspořádání testů: Seskupte testy podle kategorie, priority nebo vlastníka.
- Spuštění testů filtru: Spustí konkrétní podmnožinu testů na základě metadat.
- Sledování pokrytí testů: Propojte testy s pracovními položkami a požadavky.
- Generování sestav: Zahrnout metadata do testovacích sestav a řídicích panelů
Kategorizace testů
TestCategoryAttribute
TestCategoryAttribute seskupuje testy do kategorií pro filtrování a organizaci. Tento atribut můžete použít na úrovni metody, třídy nebo sestavení a kategorie jsou kombinovány při použití na více úrovních.
Kategorie na úrovni metody
Aplikovat kategorie přímo na testovací metody pro jemné řízení:
[TestClass]
public class OrderTests
{
[TestMethod]
[TestCategory("Integration")]
public void CreateOrder_SavesOrderToDatabase()
{
// Integration test
}
[TestMethod]
[TestCategory("Unit")]
public void CalculateTotal_ReturnsSumOfItems()
{
// Unit test
}
[TestMethod]
[TestCategory("Integration")]
[TestCategory("Slow")]
public void ProcessLargeOrder_CompletesSuccessfully()
{
// Multiple categories allowed
}
}
Kategorie na úrovni třídy
Použijte kategorii pro testovací třídu, aby se tato kategorie přiřadila ke všem testovacím metodám v rámci třídy.
[TestClass]
[TestCategory("Payments")]
public class PaymentServiceTests
{
[TestMethod]
public void ProcessPayment_ValidCard_Succeeds()
{
// Inherits "Payments" category from class
}
[TestMethod]
[TestCategory("Slow")]
public void ProcessBatchPayments_LargeVolume_CompletesSuccessfully()
{
// Has both "Payments" (from class) and "Slow" (from method) categories
}
}
Kategorie na úrovni sestavení
Použití kategorie na úrovni sestavení k kategorizaci všech testů v celém testovacím sestavení. Tento přístup je užitečný pro rozlišení typů testů napříč projekty:
// In AssemblyInfo.cs or any file in your test project
using Microsoft.VisualStudio.TestTools.UnitTesting;
[assembly: TestCategory("E2E")]
K uspořádání testovacích projektů podle typu testu použijte kategorie na úrovni sestavení:
| Project | Kategorie sestavení | Účel |
|---|---|---|
MyApp.UnitTests |
Unit |
Rychlé, izolované testy jednotek |
MyApp.IntegrationTests |
Integration |
Testy s externími závislostmi |
MyApp.E2ETests |
E2E |
Kompletní testy scénářů |
Filtrování testů podle kategorie
Spuštění testů podle kategorie pomocí dotnet test příkazu:
# Run only integration tests
dotnet test --filter TestCategory=Integration
# Run tests in multiple categories
dotnet test --filter "TestCategory=Integration|TestCategory=Unit"
# Exclude slow tests
dotnet test --filter TestCategory!=Slow
V Průzkumníku testů sady Visual Studio použijte vyhledávací pole s Trait: předponou:
-
Trait:"TestCategory=Integration"– zobrazuje integrační testy. -
-Trait:"TestCategory=Slow"- vylučuje pomalé testy.
TestPropertyAttribute
To TestPropertyAttribute přidává vlastní metadata ve formátu klíč-hodnota do testů. Tento atribut použijte, pokud předdefinované atributy nevyhovují vašim potřebám.
[TestClass]
public class CustomMetadataTests
{
[TestMethod]
[TestProperty("Feature", "Authentication")]
[TestProperty("Sprint", "23")]
[TestProperty("RiskLevel", "High")]
public void Login_WithValidCredentials_Succeeds()
{
// Test with custom properties
}
[TestMethod]
[TestProperty("Feature", "Authorization")]
[TestProperty("RequirementId", "REQ-AUTH-001")]
public void AccessAdminPage_RequiresAdminRole()
{
// Link to requirements
}
}
Vlastnosti se zobrazí v okně Vlastnosti sady Visual Studio v části Specifické pro testování.
Filtrování podle vlastních vlastností
# Filter by custom property
dotnet test --filter "Feature=Authentication"
Vlastnictví testu a priorita
OwnerAttribute
Určuje OwnerAttribute , kdo je zodpovědný za test.
[TestClass]
public class PaymentTests
{
[TestMethod]
[Owner("jsmith")]
public void ProcessPayment_ChargesCorrectAmount()
{
// John Smith owns this test
}
[TestMethod]
[Owner("team-payments")]
public void RefundPayment_CreditsCustomerAccount()
{
// Team responsibility
}
}
Filtrování testů podle vlastníka:
dotnet test --filter Owner=jsmith
PriorityAttribute
Označuje PriorityAttribute relativní důležitost testu. Nižší hodnoty označují vyšší prioritu.
[TestClass]
public class CriticalPathTests
{
[TestMethod]
[Priority(0)]
public void Login_IsAlwaysAvailable()
{
// Highest priority - core functionality
}
[TestMethod]
[Priority(1)]
public void CreateAccount_WorksCorrectly()
{
// High priority
}
[TestMethod]
[Priority(2)]
public void CustomizeProfile_SavesPreferences()
{
// Medium priority
}
}
Filtrování testů podle priority:
# Run only highest priority tests
dotnet test --filter Priority=0
# Run high priority or higher
dotnet test --filter "Priority=0|Priority=1"
DescriptionAttribute
Poskytuje DescriptionAttribute čitelný popis toho, co test ověřuje.
Výstraha
Použít Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute, ne System.ComponentModel.DescriptionAttribute. Analyzátor MSTEST0031 zjistí nesprávné použití.
[TestClass]
public class DocumentedTests
{
[TestMethod]
[Description("Verifies that orders over $100 receive a 10% discount")]
public void ApplyDiscount_LargeOrder_Gets10PercentOff()
{
// Test implementation
}
[TestMethod]
[Description("Ensures email validation rejects malformed addresses")]
public void ValidateEmail_InvalidFormat_ReturnsFalse()
{
// Test implementation
}
}
Sledování pracovních položek
WorkItemAttribute
Odkazy WorkItemAttribute propojují testy s pracovními položkami ve vašem sledovacím systému (například Azure DevOps).
[TestClass]
public class BugFixTests
{
[TestMethod]
[WorkItem(12345)]
[Description("Regression test for bug #12345")]
public void DatePicker_LeapYear_HandlesFebruary29()
{
// Test that verifies the bug fix
}
[TestMethod]
[WorkItem(67890)]
[WorkItem(67891)] // Can link multiple work items
public void Export_LargeDataset_CompletesWithinTimeout()
{
// Test related to multiple work items
}
}
GitHubWorkItemAttribute
Tyto GitHubWorkItemAttribute odkazy propojují testy s problémy na GitHubu.
Note
Tato GitHubWorkItemAttribute verze byla zavedena v MSTest 3.8.
[TestClass]
public class GitHubLinkedTests
{
[TestMethod]
[GitHubWorkItem("https://github.com/myorg/myrepo/issues/42")]
public void FeatureX_WorksAsExpected()
{
// Test linked to GitHub issue #42
}
[TestMethod]
[GitHubWorkItem("https://github.com/myorg/myrepo/issues/100")]
[Ignore("Waiting for upstream fix")]
public void DependentFeature_RequiresUpdate()
{
// Ignored test linked to tracking issue
}
}
Atributy pracovních položek jsou zvláště cenné v kombinaci s Ignore:
[TestMethod]
[Ignore("Known issue, tracked in work item")]
[WorkItem(99999)]
public void KnownIssue_AwaitingFix()
{
// Provides traceability for why the test is ignored
}
Kombinování atributů
Kombinování více atributů metadat pro komplexní testovací organizaci:
[TestClass]
public class FullyDocumentedTests
{
[TestMethod]
[TestCategory("Integration")]
[TestCategory("API")]
[Owner("payment-team")]
[Priority(1)]
[Description("Verifies that the payment API returns correct error codes for invalid requests")]
[WorkItem(54321)]
[TestProperty("Sprint", "24")]
[TestProperty("Feature", "ErrorHandling")]
public void PaymentAPI_InvalidRequest_ReturnsAppropriateErrorCode()
{
// Well-documented test with full traceability
}
}
Osvědčené postupy
Používejte konzistentní kategorie: Vytvořte konvence vytváření názvů pro testovací kategorie v rámci projektu.
Nastavte priority strategicky: Zarezervujte
Priority(0)si testy kritických cest, které musí projít pro realizovatelný build.Propojení s pracovními položkami: Testy vždy propojte se souvisejícími pracovními položkami pro sledovatelnost, zejména regresní testy chyb.
Účel testu dokumentu: Slouží
Descriptionke složitým testům, ve kterých název metody plně nevysvětluje záměr.Zachovat metadata aktuální: Aktualizujte metadata při změně rozsahu testu nebo vlastnictví.
Pro filtrování použijte kategorie: Kategorie návrhu pro podporu potřeb kanálu CI/CD (například "Smoke", "Nightly", "Integration").
Filtrování testů
Filtrování příkazového řádku
# Filter by category
dotnet test --filter TestCategory=Unit
# Filter by owner
dotnet test --filter Owner=jsmith
# Filter by priority
dotnet test --filter Priority=0
# Combine filters (AND)
dotnet test --filter "TestCategory=Integration&Priority=0"
# Combine filters (OR)
dotnet test --filter "TestCategory=Smoke|TestCategory=Critical"
# Exclude by filter
dotnet test --filter TestCategory!=Slow
# Filter by custom property
dotnet test --filter "Feature=Payments"
Průzkumník testů Visual Studio
Použijte vyhledávací pole v Průzkumníku testů:
-
Trait:"TestCategory=Integration"- filtrovat podle kategorie -
Trait:"Owner=jsmith"- filtrovat podle vlastníka -
Trait:"Priority=0"- filtrovat podle priority
Další informace o filtrování testů naleznete v tématu Spuštění selektivních testů jednotek.