Menulis pengujian dengan MSTest

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, atau ValueTask (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:

Menguji anggota privat

Anda dapat menguji anggota privat menggunakan kelas pembungkus refleksi:

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.

Lihat juga