Bagikan melalui


Pernyataan MSTest

Gunakan kelas dari namespace Microsoft.VisualStudio.TestTools.UnitTesting untuk memverifikasi fungsionalitas tertentu. Metode pengujian menjalankan kode dalam aplikasi Anda tetapi melaporkan kebenaran hanya saat Anda menyertakan Assert pernyataan.

Gambaran Umum

MSTest menyediakan tiga kelas pernyataan:

Class Tujuan
Assert Pernyataan tujuan umum untuk nilai, jenis, dan pengecualian.
StringAssert Pernyataan khusus string untuk pola, substring, dan perbandingan.
CollectionAssert Pernyataan pengumpulan untuk membandingkan dan memvalidasi koleksi.

Petunjuk / Saran

Ketika fungsionalitas ada di Assert dan StringAssert/CollectionAssert, lebih pilih kelas Assert. Kelas ini Assert memberikan kemudahan penemuan yang lebih baik dan merupakan pilihan yang direkomendasikan untuk kode baru. StringAssert dan CollectionAssert dipertahankan untuk kompatibilitas ke belakang.

Semua metode pernyataan menerima parameter pesan opsional yang ditampilkan saat pernyataan gagal, membantu Anda mengidentifikasi penyebabnya:

Assert.AreEqual(expected, actual, "Values should match after processing");

Kelas Assert

Assert Gunakan kelas untuk memverifikasi bahwa kode yang sedang diuji berulah seperti yang diharapkan.

Metode pernyataan umum

[TestMethod]
public async Task AssertExamples()
{
    // Equality
    Assert.AreEqual(5, calculator.Add(2, 3));
    Assert.AreNotEqual(0, result);

    // Reference equality
    Assert.AreSame(expected, actual);
    Assert.AreNotSame(obj1, obj2);

    // Boolean conditions
    Assert.IsTrue(result > 0);
    Assert.IsFalse(string.IsNullOrEmpty(name));

    // Null checks
    Assert.IsNull(optionalValue);
    Assert.IsNotNull(requiredValue);

    // Type checks
    Assert.IsInstanceOfType<IDisposable>(obj);
    Assert.IsNotInstanceOfType<string>(obj);

    // Exception testing (MSTest v3.8+)
    Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
    await Assert.ThrowsExactlyAsync<InvalidOperationException>(
        async () => await service.ProcessAsync());
}

API yang Tersedia

Kelas StringAssert

StringAssertGunakan kelas untuk membandingkan dan memeriksa string.

Nota

Semua metode StringAssert memiliki padanan dalam kelas Assert. Lebih dianjurkan untuk menggunakan metode Assert untuk meningkatkan keterjangkauan. Kelas StringAssert dipertahankan untuk kompatibilitas mundur.

API yang tersedia adalah:

Kelas CollectionAssert

CollectionAssertGunakan kelas untuk membandingkan koleksi objek, atau untuk memverifikasi status koleksi.

Nota

Ketika metode yang setara ada di Assert kelas (seperti Assert.Contains, ), Assert.DoesNotContainlebih suka menggunakan Assert untuk penemuan yang lebih baik. Kelas CollectionAssert dipertahankan terutama untuk kompatibilitas mundur.

API yang tersedia adalah:

Praktik terbaik

  1. Gunakan pernyataan tertentu: Lebih disukai AreEqual untuk memberikan IsTrue(a == b) pesan kegagalan yang lebih baik.

  2. Menyertakan pesan deskriptif: Membantu mengidentifikasi kegagalan dengan cepat dengan pesan pernyataan yang jelas.

  3. Uji satu per satu: Setiap metode pengujian harus memverifikasi satu perilaku.

  4. Menggunakan Throws/ThrowsExactly untuk pengecualian: Di MSTest v3.8+, lebih suka Assert.Throws, Assert.ThrowsExactly, dan mitra asinkron mereka (ThrowsAsync, ThrowsExactlyAsync) daripada ExpectedException atribut .

  5. Lebih disukai Assert dibandingkan StringAssert/CollectionAssert: Ketika fungsionalitas ada di kedua kelas, gunakan kelas Assert untuk kemudahan ditemukan dan agar lebih konsisten.

Penganalisis berikut membantu memastikan penggunaan pernyataan yang tepat:

  • MSTEST0006 - Hindari ExpectedException atribut, gunakan Assert.Throws metode sebagai gantinya.
  • MSTEST0017 - Argumen pernyataan harus diteruskan dalam urutan yang benar.
  • MSTEST0023 - Jangan meniadakan pernyataan boolean.
  • MSTEST0025 - Lebih suka Assert.Fail daripada kondisi yang selalu salah.
  • MSTEST0026 - Argumen pernyataan harus menghindari akses bersyarat.
  • MSTEST0032 - Tinjau kondisi pernyataan yang selalu benar.
  • MSTEST0037 - Gunakan metode pernyataan yang tepat.
  • MSTEST0038 - Hindari Assert.AreSame dengan tipe nilai.
  • MSTEST0039 - Gunakan metode yang lebih Assert.Throws baru.
  • MSTEST0040 - Hindari menggunakan assert dalam konteks async void.
  • MSTEST0046 - Gunakan Assert alih-alih StringAssert.
  • - Assert.Throws MSTEST0051 harus berisi satu pernyataan.
  • MSTEST0053 - Hindari Assert parameter format.
  • MSTEST0058 - Hindari penggunaan 'assert' dalam blok tangkapan.

Lihat juga