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.
Dalam artikel ini, Anda mempelajari tentang API dan konvensi yang digunakan oleh MSTest untuk membantu Anda menulis dan membentuk pengujian Anda.
Catatan
Nama atribut yang di akhir dengan "Atribut" dapat menggunakan bentuk pendek.
TestClass dan TestClassAttribute setara. Atribut dengan konstruktor tanpa parameter dapat menghilangkan tanda kurung.
Struktur pengujian
Setiap kelas pengujian MSTest harus memiliki TestClass atribut , dan setiap metode pengujian harus memiliki TestMethod atribut :
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
int result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
TestClassAttribute
Menandakan TestClassAttribute sebagai kelas yang mencakup pengujian dan, secara opsional, metode inisialisasi atau pembersihan. Anda dapat memperluas atribut ini untuk menyesuaikan perilaku kelas pengujian.
TestMethodAttribute
Menandai TestMethodAttribute metode sebagai pengujian untuk dijalankan. Metode pengujian harus:
- Metode instans (tidak statis)
- Umum
- Mengembalikan
void,Task, atauValueTask(MSTest v3.3+) - Tanpa parameter, kecuali menggunakan atribut berbasis data
[TestClass]
public class TestMethodExamples
{
[TestMethod]
public void SynchronousTest()
{
Assert.IsTrue(true);
}
[TestMethod]
public async Task AsynchronousTest()
{
await Task.Delay(100);
Assert.IsTrue(true);
}
}
Peringatan
Jangan gunakan async void untuk metode pengujian. Gunakan async Task atau async ValueTask sebagai gantinya.
DiscoverInternalsAttribute
Atribut DiscoverInternalsAttribute assembly memungkinkan MSTest untuk menemukan internal kelas dan metode pengujian. Secara default, hanya public tes yang ditemukan. Atribut ini sangat berguna ketika Anda memiliki pengujian berparameter yang menggunakan jenis internal sebagai parameter:
[assembly: DiscoverInternals]
internal record TestInput(int Value, string Description);
[TestClass]
public class CalculatorTests
{
internal static IEnumerable<TestInput> TestData
{
get
{
yield return new TestInput(1, "one");
yield return new TestInput(2, "two");
}
}
[TestMethod]
[DynamicData(nameof(TestData))]
internal void Add_WithTestInput_ReturnsExpected(TestInput input)
{
var calculator = new Calculator();
int result = calculator.Add(input.Value, 1);
Assert.AreEqual(input.Value + 1, result);
}
}
Tanpa DiscoverInternals, metode pengujian dan jenis parameter internalnya TestInput tidak akan ditemukan oleh runner pengujian.
Konsep inti
Dokumentasi MSTest diatur berdasarkan topik:
| Topik | Description |
|---|---|
| Pernyataan | Memverifikasi hasil yang diharapkan dengan kelas Assert |
| Pengujian berbasis data | Jalankan pengujian dengan beberapa input (DataRow, DynamicData) |
| Siklus hidup pengujian | Penyiapan dan pembersihan di tingkat perakitan, kelas, dan pengujian |
| Kontrol eksekusi | Pemrosesan berutas, paralelisasi, batas waktu, pengulangan, dan eksekusi bersyarat |
| Organisasi Uji | Kategori, prioritas, pemilik, dan metadata |
| TestContext | Mengakses informasi waktu eksekusi pengujian |
Referensi atribut cepat
| Kategori | Atribut | Lihat |
|---|---|---|
| Identifikasi pengujian |
TestClass
TestMethod
DiscoverInternals
|
Halaman ini |
| Berbasis data |
DataRow
DynamicData
TestDataRow
|
Pengujian berbasis data |
| Lifecycle |
AssemblyInitialize, , ClassInitializeTestInitialize, dan rekan pembersihan |
Siklus hidup pengujian |
| Threading |
STATestClass
STATestMethod
UITestMethod
|
Kontrol eksekusi |
| Paralelisasi |
Parallelize, DoNotParallelize |
Kontrol eksekusi |
| Waktu Habis/Coba Lagi |
Timeout, Retry |
Kontrol eksekusi |
| Bersyarat |
Ignore
OSCondition
CICondition
|
Kontrol eksekusi |
| Metainformasi |
TestCategory,TestProperty,Owner,Priority |
Organisasi Uji |
| Pemantauan pekerjaan |
WorkItem, GitHubWorkItem |
Organisasi Uji |
Pernyataan
Gunakan kelas Assert namespace Microsoft.VisualStudio.TestTools.UnitTesting untuk memverifikasi fungsionalitas tertentu. Metode pengujian menjalankan kode di aplikasi Anda, tetapi melaporkan kebenaran hanya saat Anda menyertakan pernyataan Assert.
Pernyataan MSTest dibagi menjadi:
-
Assertkelas: Pernyataan tujuan umum (AreEqual, ,IsTrueThrowsException) -
StringAssertkelas: Pernyataan khusus string (Contains, ,MatchesStartsWith) -
CollectionAssertkelas: Pernyataan koleksi (Contains,AllItemsAreUnique,AreEquivalent)
Menguji anggota privat
Anda dapat menguji anggota privat menggunakan kelas pembungkus refleksi:
- PrivateObject: Untuk metode instans privat
- PrivateType: Untuk metode statis privat
Petunjuk / Saran
Pertimbangkan apakah metode privat memerlukan pengujian langsung. Seringkali, pengujian melalui antarmuka publik memberikan cakupan yang lebih baik dan pengujian yang lebih dapat dipertahankan.