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 menggunakan atribut kustom untuk mengidentifikasi dan menyesuaikan pengujian.
Untuk membantu memberikan gambaran umum yang lebih jelas tentang kerangka kerja pengujian, bagian ini mengatur anggota Microsoft.VisualStudio.TestTools.UnitTesting namespace ke dalam grup fungsionalitas terkait.
Catatan
Atribut, yang namanya diakhir dengan "Atribut", dapat digunakan dengan atau tanpa "Atribut" di akhir. Atribut yang memiliki konstruktor tanpa parameter, dapat ditulis dengan atau tanpa tanda kurung. Contoh kode berikut berfungsi secara identik:
[TestClass()]
[TestClassAttribute()]
[TestClass]
[TestClassAttribute]
Atribut yang digunakan untuk mengidentifikasi kelas dan metode pengujian
Setiap kelas pengujian harus memiliki atribut TestClass, dan setiap metode pengujian harus memiliki atribut TestMethod.
TestClassAttribute
Atribut TestClass menandai kelas yang berisi pengujian dan, secara opsional, menginisialisasi, atau membersihkan metode.
Atribut ini dapat diperluas untuk mengubah atau memperluas perilaku default.
Contoh:
[TestClass]
public class MyTestClass
{
}
TestMethodAttribute
Atribut TestMethod digunakan di dalam untuk menentukan metode pengujian aktual TestClass yang akan dijalankan.
Metode harus berupa metode instans public yang didefinisikan sebagai void, Task, atau ValueTask (dimulai dengan MSTest v3.3). Ini bisa secara async opsional tetapi tidak boleh async void.
Metode harus memiliki parameter nol, kecuali ditandai dengan atribut DataRow, atribut DynamicData, atau atribut serupa yang menyediakan data kasus pengujian ke metode pengujian.
Pertimbangkan contoh kelas pengujian berikut:
[TestClass]
public class MyTestClass
{
[TestMethod]
public void TestMethod()
{
}
}
Atribut yang digunakan untuk pengujian berbasis data
Gunakan elemen berikut untuk menyiapkan pengujian berbasis data. Untuk informasi selengkapnya, lihat Membuat pengujian unit berbasis data dan Menggunakan file konfigurasi untuk menentukan sumber data.
Petunjuk / Saran
MSTest tidak secara asli mendukung pengujian combinatorial, tetapi Anda dapat menambahkan kemampuan ini menggunakan paket Combinatorial.MSTest NuGet sumber terbuka. Ini secara aktif dikelola oleh komunitas dan tersedia di GitHub. Paket ini tidak dikelola oleh Microsoft.
DataRowAttribute
Atribut DataRow memungkinkan Anda menjalankan metode pengujian yang sama dengan beberapa input yang berbeda. Ini dapat muncul satu atau beberapa kali pada metode pengujian. Ini harus dikombinasikan dengan atribut TestMethod.
Jumlah dan jenis argumen harus sama persis dengan tanda tangan metode pengujian. Pertimbangkan contoh kelas pengujian yang valid berikut yang menunjukkan penggunaan DataRowAttribute dengan argumen sebaris yang selaras dengan parameter metode pengujian:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, "message", true, 2.0)]
public void TestMethod1(int i, string s, bool b, float f)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" })]
public void TestMethod2(string[] lines)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(null)]
public void TestMethod3(object o)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" }, new string[] { "line1.", "line2." })]
public void TestMethod4(string[] input, string[] expectedOutput)
{
// Omitted for brevity.
}
}
Catatan
Anda juga dapat menggunakan fitur untuk params mengambil beberapa input .DataRowAttribute
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2, 3, 4)]
public void TestMethod(params int[] values) {}
}
Contoh kombinasi yang tidak valid:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2)] // Not valid, we are passing 2 inline data but signature expects 1
public void TestMethod1(int i) {}
[TestMethod]
[DataRow(1)] // Not valid, we are passing 1 inline data but signature expects 2
public void TestMethod2(int i, int j) {}
[TestMethod]
[DataRow(1)] // Not valid, count matches but types do not match
public void TestMethod3(string s) {}
}
Catatan
Dimulai dengan MSTest v3, ketika Anda ingin melewati tepat 2 array, Anda tidak perlu lagi membungkus array kedua dalam array objek.
Sebelum:[DataRow(new string[] { "a" }, new object[] { new string[] { "b" } })]Mulai dengan v3:[DataRow(new string[] { "a" }, new string[] { "b" })]
Anda dapat mengubah nama tampilan yang digunakan di Visual Studio dan pencatat untuk setiap instans DataRowAttribute dengan mengatur DisplayName properti .
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2, DisplayName = "Functional Case FC100.1")]
public void TestMethod(int i, int j) {}
}
Anda juga dapat membuat atribut DataRow khusus Anda sendiri dengan mewarisi DataRowAttribute.
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyCustomDataRowAttribute : DataRowAttribute
{
}
[TestClass]
public class TestClass
{
[TestMethod]
[MyCustomDataRow(1)]
public void TestMethod(int i) {}
}
Atribut yang digunakan untuk menyediakan inisialisasi dan pembersihan
Penyiapan dan pembersihan yang umum untuk beberapa pengujian dapat diekstrak ke metode terpisah, dan ditandai dengan salah satu atribut yang tercantum di bawah ini, untuk menjalankannya pada waktu yang tepat, misalnya sebelum setiap pengujian. Untuk informasi selengkapnya, lihat Anatomi pengujian unit.
Tingkat rakitan
Atribut AssemblyInitialize dipanggil tepat setelah assembly Anda dimuat dan atribut AssemblyCleanup dipanggil tepat sebelum assembly Anda dibongkar.
Metode yang ditandai dengan atribut ini harus didefinisikan sebagai static void, static Task atau static ValueTask (dimulai dengan MSTest v3.3), di kelas yang ditandai dengan TestClassAttribute, dan hanya muncul sekali. Bagian inisialisasi memerlukan satu parameter jenis TestContext dan bagian pembersihan tidak memerlukan parameter, atau jika menggunakan MSTest 3.8, dapat memiliki satu parameter jenis TestContext.
[TestClass]
public class MyTestClass
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext testContext)
{
}
[AssemblyCleanup]
public static void AssemblyCleanup() // Starting with MSTest 3.8, it can be AssemblyCleanup(TestContext testContext)
{
}
}
Tingkat kelas
Atribut ClassInitialize dipanggil sesaat sebelum kelas Anda dimuat (tetapi setelah konstruktor statis) dan ClassCleanup dipanggil sesaat setelah kelas Anda dibongkar.
Penting
Secara bawaan, ClassCleanupAttribute akan dipicu setelah pengujian terakhir perakitan (mirip dengan AssemblyCleanupAttribute). Anda dapat mengubah perilaku ini dengan mengatur CleanupBehavior pada atribut . Atau, Anda dapat mengatur perilaku ini secara global untuk perakitan menggunakan atribut assembly ClassCleanupExecutionAttribute.
Anda juga dapat mengontrol perilaku warisan: hanya untuk kelas saat ini yang menggunakan InheritanceBehavior.None, atau untuk semua kelas turunan menggunakan InheritanceBehavior.BeforeEachDerivedClass.
Metode yang ditandai dengan atribut ini harus didefinisikan sebagai static void, static Task atau static ValueTask (dimulai dengan MSTest v3.3), dalam TestClass, dan hanya muncul sekali. Bagian inisialisasi memerlukan satu parameter jenis TestContext dan bagian pembersihan tidak memerlukan parameter, atau jika menggunakan MSTest 3.8, dapat memiliki satu parameter jenis TestContext.
[TestClass]
public class MyTestClass
{
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
}
[ClassCleanup]
public static void ClassCleanup() // Starting with MSTest 3.8, it can be ClassCleanup(TestContext testContext)
{
}
}
Tingkat pengujian
Atribut TestInitialize dipanggil tepat sebelum pengujian Anda dimulai dan TestCleanup dipanggil tepat setelah pengujian Anda selesai.
TestInitializeAttribute mirip dengan konstruktor kelas tetapi biasanya lebih cocok untuk inisialisasi panjang atau asinkron. TestInitializeAttribute selalu dipanggil setelah konstruktor dan dipanggil untuk setiap pengujian (termasuk setiap entri pengujian berbasis data ).
TestCleanupAttribute mirip dengan kelas Dispose (atau DisposeAsync) tetapi biasanya lebih cocok untuk pembersihan panjang atau asinkron.
TestCleanupAttribute selalu dipanggil tepat sebelum DisposeAsync/Dispose dan dipanggil untuk setiap pengujian (termasuk setiap entri pengujian berbasis data ).
Metode yang ditandai dengan atribut ini harus didefinisikan sebagai void, Task atau ValueTask (dimulai dengan MSTest v3.3), dalam TestClass, tanpa parameter, dan muncul satu atau beberapa kali.
[TestClass]
public class MyTestClass
{
[TestInitialize]
public void TestInitialize()
{
}
[TestCleanup]
public void TestCleanup()
{
}
}
Atribut yang digunakan untuk mengontrol eksekusi pengujian
Atribut berikut dapat digunakan untuk memodifikasi cara pengujian dijalankan.
TimeoutAttribute
Atribut Timeout dapat digunakan untuk menentukan waktu maksimum dalam milidetik bahwa metode pengujian diizinkan untuk dijalankan. Jika metode pengujian berjalan lebih lama dari waktu yang ditentukan, pengujian akan dibatalkan dan ditandai sebagai gagal.
Atribut ini dapat diterapkan ke metode pengujian apa pun atau metode fikstur apa pun (metode inisialisasi dan pembersihan). Dimungkinkan juga untuk menentukan batas waktu secara global untuk semua metode pengujian atau semua metode perlengkapan pengujian dengan menggunakan properti batas waktu file runsettings.
Catatan
Batas waktu tidak dijamin tepat. Pengujian akan dibatalkan setelah waktu yang ditentukan berlalu, tetapi mungkin perlu waktu lebih lama sebelum langkah dibatalkan.
Saat menggunakan fitur batas waktu, alur/tugas terpisah dibuat untuk menjalankan metode pengujian. Alur/tugas utama bertanggung jawab untuk memantau batas waktu dan membatalkan pembatasan utas/tugas metode jika batas waktu tercapai.
Dimulai dengan MSTest 3.6, dimungkinkan untuk menentukan CooperativeCancellation properti pada atribut (atau secara global melalui runsetting) untuk memungkinkan pembatalan kooperatif. Dalam mode ini, metode ini bertanggung jawab untuk memeriksa token pembatalan dan membatalkan pengujian jika disinyalir seperti yang akan Anda lakukan dalam metode umum async . Mode ini lebih berkinerja dan memungkinkan kontrol yang lebih tepat atas proses pembatalan. Mode ini dapat diterapkan ke metode asinkron dan sinkronisasi.
STATestClassAttribute
Ketika diterapkan ke kelas pengujian, atribut STATestClass menunjukkan bahwa semua metode pengujian (dan metode [ClassInitialize] dan [ClassCleanup]) di kelas harus dijalankan di apartemen berulir tunggal (STA). Atribut ini berguna ketika metode pengujian berinteraksi dengan objek COM yang memerlukan STA.
Catatan
Ini hanya didukung pada Windows dan di versi 3.6 dan yang lebih baru.
STATestMethodAttribute
Ketika diterapkan ke metode pengujian, atribut STATestMethod menunjukkan bahwa metode pengujian harus dijalankan di apartemen berulir tunggal (STA). Atribut ini berguna ketika metode pengujian berinteraksi dengan objek COM yang memerlukan STA.
Catatan
Ini hanya didukung pada Windows dan di versi 3.6 dan yang lebih baru.
ParallelizeAttribute
Secara default, MSTest menjalankan pengujian dalam urutan berurutan. Atribut tingkat perakitan atribut Paralelisasi dapat digunakan untuk menjalankan pengujian secara paralel. Anda dapat menentukan apakah paralelisme harus berada di tingkat kelas (beberapa kelas dapat dijalankan secara paralel tetapi pengujian di kelas tertentu dijalankan secara berurutan) atau pada tingkat metode.
Anda juga dapat menentukan jumlah maksimum utas yang akan digunakan untuk eksekusi paralel. Nilai 0 (nilai default) berarti bahwa jumlah utas sama dengan jumlah prosesor logis pada komputer.
Dimungkinkan juga untuk menentukan paralelisme melalui properti paralelisasi file runsettings.
DoNotParallelizeAttribute
Atribut DoNotParallelize dapat digunakan untuk mencegah eksekusi tes paralel dalam rakitan tertentu. Atribut ini dapat diterapkan pada tingkat perakitan, tingkat kelas, atau tingkat metode.
Catatan
Secara default, MSTest menjalankan pengujian secara berurutan sehingga Anda hanya perlu menggunakan atribut ini jika Anda telah menerapkan tingkat perakitan Paralelisasi atribut.
RetryAttribute
Atribut Retry diperkenalkan dalam MSTest 3.8. Atribut ini menyebabkan metode pengujian dicoba kembali ketika gagal atau waktu habis. Ini memungkinkan Anda menentukan jumlah maksimum upaya ulang, penundaan antara percobaan ulang, dan jenis pengurangan penundaan, yang bisa bersifat konstan atau eksponensial.
Hanya satu RetryAttribute yang diharapkan ada pada metode pengujian, dan RetryAttribute tidak dapat digunakan pada metode yang tidak ditandai dengan TestMethod.
Catatan
RetryAttribute berasal dari RetryBaseAttributeabstrak . Anda juga dapat membuat implementasi coba lagi sendiri jika RetryAttribute bawaan tidak sesuai dengan kebutuhan Anda.
Atribut utilitas
DeploymentItemAttribute
Atribut DeploymentItem digunakan untuk menyalin file atau folder yang ditentukan sebagai item penyebaran ke direktori penyebaran (tanpa menambahkan jalur output kustom, file yang disalin akan berada di folder TestResults di dalam folder proyek). Direktori penyebaran adalah tempat semua item penyebaran ada bersama dengan DLL proyek pengujian.
Ini dapat digunakan baik pada kelas pengujian (kelas yang ditandai dengan atribut TestClass) atau pada metode pengujian (metode yang ditandai dengan atribut TestMethod).
Pengguna dapat memiliki beberapa instans atribut untuk menentukan lebih dari satu item.
Dan di sini Anda dapat melihat konstruktornya.
Contoh
[TestClass]
[DeploymentItem(@"C:\classLevelDepItem.xml")] // Copy file using some absolute path
public class UnitTest1
{
[TestMethod]
[DeploymentItem(@"..\..\methodLevelDepItem1.xml")] // Copy file using a relative path from the dll output location
[DeploymentItem(@"C:\DataFiles\methodLevelDepItem2.xml", "SampleDataFiles")] // File will be added under a SampleDataFiles in the deployment directory
public void TestMethod1()
{
string textFromFile = File.ReadAllText("classLevelDepItem.xml");
}
}
Peringatan
Kami tidak merekomendasikan penggunaan atribut ini untuk menyalin file ke direktori penyebaran.
ExpectedExceptionAttribute
Atribut ExpectedException mendefinisikan pengecualian bahwa metode pengujian diharapkan untuk dilemparkan. Pengujian lolos jika pengecualian yang diharapkan dilemparkan dan pesan pengecualian cocok dengan pesan yang diharapkan.
Peringatan
Atribut ini ada untuk kompatibilitas mundur dan tidak disarankan untuk pengujian baru. Sebagai gantinya, gunakan metode Assert.ThrowsException (atau Assert.ThrowsExactly jika menggunakan MSTest 3.8 dan yang lebih baru).
Atribut metadata
Atribut berikut dan nilai yang ditetapkan untuknya muncul di jendela Visual StudioProperti untuk metode pengujian tertentu. Atribut ini tidak dimaksudkan untuk diakses melalui kode pengujian. Sebaliknya, mereka memengaruhi cara pengujian digunakan atau dijalankan, baik oleh Anda melalui IDE Visual Studio, atau oleh mesin uji Visual Studio. Misalnya, beberapa atribut ini muncul sebagai kolom di jendela Pengelola Pengujian dan jendela Hasil Pengujian, yang berarti Anda dapat menggunakannya untuk mengelompokkan dan mengurutkan pengujian dan hasil pengujian. Salah satu atribut tersebut adalah TestPropertyAttribute, yang Anda gunakan untuk menambahkan metadata arbitrer ke pengujian.
Misalnya, Anda dapat menggunakannya untuk menyimpan nama "uji lulus" yang dicakup pengujian ini, dengan menandai pengujian dengan [TestProperty("Feature", "Accessibility")]. Atau, Anda dapat menggunakannya untuk menyimpan indikator jenis pengujian Itu dengan [TestProperty("ProductMilestone", "42")]. Properti yang Anda buat dengan menggunakan atribut ini, dan properti yang nilainya Anda tetapkan, keduanya ditampilkan di jendela Properti Visual Studio di bawah judul Pengujian khusus.
- DescriptionAttribute
- IgnoreAttribute
- OwnerAttribute
- PriorityAttribute
- TestCategoryAttribute
- TestPropertyAttribute
- WorkItemAttribute
Atribut di bawah ini menghubungkan metode pengujian yang mereka hiasi ke entitas dalam hierarki Team Foundation Server proyek proyek tim: