Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
MSTest menyediakan atribut untuk mengatur pengujian, menambahkan metadata, dan menautkan pengujian ke sistem pelacakan kerja. Atribut ini membantu Anda memfilter, mengurutkan, dan mengelola pengujian secara efektif di suite pengujian besar.
Gambaran Umum
Atribut metadata muncul di jendela Properti Visual Studio untuk metode pengujian. Mereka membantu Anda:
- Mengatur pengujian: Mengelompokkan pengujian berdasarkan kategori, prioritas, atau pemilik.
- Eksekusi pengujian filter: Jalankan subset pengujian tertentu berdasarkan metadata.
- Lacak cakupan pengujian: Tautkan pengujian ke item dan persyaratan kerja.
- Hasilkan laporan: Sertakan metadata dalam laporan pengujian dan dasbor.
Kategorisasi pengujian
TestCategoryAttribute
Grup TestCategoryAttribute menguji ke dalam kategori untuk pemfilteran dan organisasi. Anda dapat menerapkan atribut ini pada tingkat metode, kelas, atau perakitan, dan kategori digabungkan saat diterapkan pada beberapa tingkat.
Kategori pada tingkat metode
Terapkan kategori langsung ke metode pengujian untuk kontrol halus:
[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
}
}
Kategori pada tingkat kelas
Terapkan kategori ke kelas pengujian untuk menetapkan kategori tersebut ke semua metode pengujian dalam kelas:
[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
}
}
Kategori pada tingkat rakitan
Terapkan kategori di tingkat rakitan untuk mengategorikan semua pengujian di seluruh rakitan pengujian. Pendekatan ini berguna untuk membedakan jenis pengujian di seluruh proyek:
// In AssemblyInfo.cs or any file in your test project
using Microsoft.VisualStudio.TestTools.UnitTesting;
[assembly: TestCategory("E2E")]
Gunakan kategori tingkat rakitan untuk mengatur proyek pengujian Anda berdasarkan jenis pengujian:
| Project | Kategori perakitan | Tujuan |
|---|---|---|
MyApp.UnitTests |
Unit |
Pengujian unit yang cepat dan terisolasi |
MyApp.IntegrationTests |
Integration |
Pengujian dengan dependensi eksternal |
MyApp.E2ETests |
E2E |
Pengujian skenario ujung-ke-ujung (end-to-end) |
Memfilter pengujian menurut kategori
Jalankan pengujian menurut kategori menggunakan dotnet test perintah :
# 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
Di Visual Studio Test Explorer, gunakan kotak pencarian dengan Trait: awalan:
-
Trait:"TestCategory=Integration"- menunjukkan pengujian integrasi -
-Trait:"TestCategory=Slow"- mengecualikan tes lambat
TestPropertyAttribute
TestPropertyAttribute menambahkan metadata kunci-nilai kustom ke tes. Gunakan atribut ini saat atribut bawaan tidak memenuhi kebutuhan Anda.
[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
}
}
Properti muncul di jendela Properti Visual Studio di bawah Uji spesifik.
Memfilter menurut properti kustom
# Filter by custom property
dotnet test --filter "Feature=Authentication"
Menguji kepemilikan dan prioritas
OwnerAttribute
OwnerAttribute mengidentifikasi siapa yang bertanggung jawab terhadap tes.
[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
}
}
Memfilter tes berdasarkan pemilik:
dotnet test --filter Owner=jsmith
PriorityAttribute
PriorityAttribute menunjukkan pentingnya pengujian relatif. Nilai yang lebih rendah menunjukkan prioritas yang lebih tinggi.
[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
}
}
Memfilter pengujian berdasarkan prioritas:
# Run only highest priority tests
dotnet test --filter Priority=0
# Run high priority or higher
dotnet test --filter "Priority=0|Priority=1"
DescriptionAttribute
memberikan DescriptionAttribute deskripsi yang mudah dibaca oleh manusia tentang apa yang diverifikasi oleh tes.
Peringatan
Gunakan Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute, bukan System.ComponentModel.DescriptionAttribute. Penganalisis MSTEST0031 mendeteksi penggunaan yang salah.
[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
}
}
Pelacakan item kerja
WorkItemAttribute
Tautan WorkItemAttribute menghubungkan pengujian dengan item kerja di sistem pelacakan Anda (seperti 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
Tautan GitHubWorkItemAttribute menghubungkan pengujian dengan masalah GitHub.
[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
}
}
Atribut item kerja sangat berharga jika dikombinasikan dengan Ignore:
[TestMethod]
[Ignore("Known issue, tracked in work item")]
[WorkItem(99999)]
public void KnownIssue_AwaitingFix()
{
// Provides traceability for why the test is ignored
}
Menggabungkan atribut
Gabungkan beberapa atribut metadata untuk organisasi pengujian komprehensif:
[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
}
}
Praktik terbaik
Gunakan kategori yang konsisten: Tetapkan konvensi penamaan untuk kategori pengujian di seluruh proyek Anda.
Tetapkan prioritas secara strategis: Sediakan
Priority(0)untuk pengujian jalur penting yang harus lulus untuk build yang layak.Tautan ke item kerja: Selalu tautkan pengujian ke item kerja terkait untuk keterlacakan, terutama pengujian regresi bug.
Tujuan pengujian dokumen: Gunakan
Descriptionuntuk pengujian kompleks di mana nama metode tidak sepenuhnya menjelaskan niat.Menjaga metadata tetap terkini: Memperbarui metadata saat menguji cakupan atau kepemilikan berubah.
Gunakan kategori untuk pemfilteran: Kategori desain untuk mendukung kebutuhan alur CI/CD Anda (misalnya, "Smoke", "Nightly", "Integration").
Pengujian pemfilteran
Pemfilteran baris perintah
# 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"
Penjelajah Pengujian Visual Studio
Gunakan kotak pencarian di Test Explorer:
-
Trait:"TestCategory=Integration"- filter menurut kategori -
Trait:"Owner=jsmith"- filter berdasarkan pemilik -
Trait:"Priority=0"- saring menurut prioritas
Untuk informasi selengkapnya tentang pemfilteran pengujian, lihat Menjalankan pengujian unit selektif.