Bagikan melalui


Mengonfigurasi MSTest

MSTest, Microsoft Testing Framework, adalah kerangka kerja pengujian untuk aplikasi .NET. Ini memungkinkan Anda untuk menulis dan menjalankan pengujian, dan menyediakan suite pengujian dengan integrasi ke Visual Studio dan Visual Studio Code Test Explorers, .NET CLI, dan banyak alur CI.

MSTest adalah kerangka kerja pengujian sumber terbuka dan lintas platform yang didukung penuh yang berfungsi dengan semua target .NET yang didukung (.NET Framework, .NET Core, .NET, UWP, WinUI, dan sebagainya) yang dihosting di GitHub.

Pengaturan Jalankan

File .runsettings dapat digunakan untuk mengonfigurasi bagaimana pengujian unit dijalankan. Untuk mempelajari lebih lanjut tentang runsettings dan konfigurasi yang terkait dengan platform, Anda dapat memeriksa dokumentasi runsettings VSTest atau dokumentasi runsettings MSTest runner.

Elemen MSTest

Entri runsetting berikut memungkinkan Anda mengonfigurasi bagaimana MSTest berperilaku.

Konfigurasi Bawaan Nilai
AssemblyCleanupTimeout 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode pembersihan perakitan. [Timeout] atribut yang ditentukan dalam metode pembersihan assembly menggantikan batas waktu global.
AssemblyInitializeTimeout 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode inisialisasi perakitan. [Timeout] atribut yang ditentukan pada metode inisialisasi assembly menggantikan batas waktu global.
AssemblyResolution salah Anda dapat menentukan jalur untuk rakitan tambahan saat menemukan dan menjalankan pengujian unit. Misalnya, gunakan jalur ini untuk rakitan dependensi yang tidak berada di direktori yang sama dengan rakitan pengujian. Untuk menentukan jalur, gunakan elemen Jalur Direktori. Jalur dapat menyertakan variabel lingkungan.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Fitur ini hanya diterapkan saat menggunakan target .NET Framework.
CaptureTraceOutput benar Ambil pesan teks yang berasal dari API Console.Write*, Trace.Write*, dan Debug.Write* yang akan terkait dengan pengujian yang sedang berlangsung.
ClassCleanupLifecycle EndOfClass Jika Anda ingin pembersihan kelas terjadi di akhir perakitan, atur menjadi EndOfAssembly. (Tidak lagi didukung mulai dari MSTest v4 karena EndOfClass adalah default dan satu-satunya perilaku ClassCleanup)
Batas Waktu Pembersihan Kelas 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode pembersihan kelas. [Timeout] atribut yang ditentukan pada metode pembersihan kelas menggantikan batas waktu global.
ClassInitializeTimeout 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode inisialisasi kelas. [Timeout] atribut yang ditentukan pada metode inisialisasi kelas menggantikan batas waktu global.
PertimbangkanFixturesSebagaiTesKhusus salah Untuk menampilkan AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup sebagai entri individual di Visual Studio dan Visual Studio Code Test Explorer dan .trx log, atur nilai ini ke true
HapusDirektoriPenyebaranSetelahPengujianSelesai benar Untuk mempertahankan direktori penyebaran setelah uji coba, atur nilai ini ke false.
PemutaranAktif benar Jika Anda mengatur nilai ke false, item penyebaran yang Anda tentukan dalam metode pengujian Anda tidak disalin ke direktori penyebaran.
DeployTestSourceDependencies benar Nilai yang menunjukkan apakah referensi sumber pengujian akan disebarkan.
AktifkanMetodeUjiKelasDasarDariMajelisLain benar Nilai yang menunjukkan apakah akan mengaktifkan penemuan metode pengujian dari kelas dasar dalam rakitan yang berbeda dengan kelas pengujian yang mewarisi.
ForcedLegacyMode salah Dalam versi Visual Studio yang lebih lama, adaptor MSTest dioptimalkan untuk membuatnya lebih cepat dan lebih dapat diskalakan. Beberapa perilaku, seperti urutan pengujian yang dijalankan, mungkin tidak persis seperti pada edisi Visual Studio sebelumnya. Atur nilai ke true untuk menggunakan adaptor pengujian yang lebih lama.

Misalnya, Anda dapat menggunakan pengaturan ini jika Anda memiliki file app.config yang ditentukan untuk pengujian unit.

Kami menyarankan Anda mempertimbangkan untuk memfaktorkan ulang pengujian Anda agar dapat mengizinkan Anda menggunakan adapter yang lebih baru.
PetaTidakTentuMenjadiGagal salah Jika pengujian selesai dengan status tidak pasti, pengujian akan diubah menjadi status dilewati di Test Explorer. Jika Anda ingin pengujian yang tidak meyakinkan ditampilkan sebagai gagal, atur nilainya ke true.
PetaTidakDapatDijalankanMenjadiGagal benar Nilai yang menunjukkan apakah hasil yang tidak dapat dijalankan dipetakan sebagai pengujian yang gagal.
UrutkanTesBerdasarkanNamaDiKelas salah Jika Anda ingin menjalankan pengujian dengan nama pengujian baik di Test Explorers maupun pada baris perintah, atur nilai ini ke true.
Memparalelkan Digunakan untuk mengatur pengaturan paralelisasi:

Pekerja: Jumlah utas/pekerja yang akan digunakan untuk paralelisasi, yang secara default adalah jumlah prosesor pada komputer saat ini.

CAKUPAN: Ruang lingkup paralelisasi. Anda dapat mengaturnya ke MethodLevel. Secara default, itu classLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
PengaturanFile Anda dapat menentukan file pengaturan pengujian untuk digunakan dengan adapter MSTest di sini. Anda juga dapat menentukan file pengaturan pengujian dari menu pengaturan.

Jika Anda menetapkan nilai ini, Anda juga harus mengatur ForcedLegacyMode ke true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Tentukan batas waktu secara global untuk setiap instance metode pembersihan pengujian. [Timeout] atribut yang ditentukan pada metode pembersihan pengujian menggantikan batas waktu global.
TestInitializeTimeout 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode inisialisasi pengujian. [Timeout] atribut yang ditentukan pada metode inisialisasi pengujian menggantikan batas waktu global.
TestTimeout 0 Mendapatkan waktu batas untuk kasus pengujian global yang ditentukan.
PerlakukanPeringatanPembersihanKelasDanMajelisSebagaiKesalahan salah Untuk melihat kegagalan Anda dalam pembersihan kelas sebagai kesalahan, atur nilai ini ke true.
PerlakukanPeringatanPenemuanSebagaiKesalahan salah Untuk melaporkan peringatan penemuan pengujian sebagai kesalahan, atur nilai ini ke true.

TestRunParameter elemen

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Parameter uji coba menyediakan cara untuk menentukan variabel dan nilai yang tersedia untuk pengujian pada runtime. Akses parameter menggunakan properti MSTest TestContext.Properties :

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Untuk menggunakan parameter uji coba, tambahkan properti TestContext publik ke kelas pengujian Anda.

Contoh file .runsettings

XML berikut menunjukkan konten file .runsettings biasa. Salin kode ini dan edit sesuai kebutuhan Anda.

Setiap elemen file bersifat opsional karena memiliki nilai default.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at runtime -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

Saat menjalankan pengujian dengan MSTest, Anda dapat menggunakan file testconfig.json untuk mengonfigurasi perilaku runner pengujian. File testconfig.json adalah file JSON yang berisi pengaturan konfigurasi untuk runner pengujian. File digunakan untuk mengonfigurasi pengelola pengujian dan lingkungan eksekusi pengujian. Untuk informasi selengkapnya, lihat dokumentasi Microsoft.Testing.Platform testconfig.json.

Dimulai dengan MSTest 3.7, Anda juga dapat mengonfigurasi eksekusi MSTest dalam file konfigurasi yang sama. Bagian berikut ini menjelaskan pengaturan yang bisa Anda gunakan dalam file testconfig.json.

Elemen MSTest

Pengaturan MSTest dikelompokkan menurut fungsionalitas yang dijelaskan di bagian berikut.

Entri Bawaan Deskripsi
urutkanTesBerdasarkanNamaDiKelas salah Jika Anda ingin menjalankan pengujian dengan nama pengujian baik di Test Explorers maupun pada baris perintah, atur nilai ini ke true.
aktifkanMetodeTesKelasDasarDariMajelisLain benar Nilai yang menunjukkan apakah akan mengaktifkan penemuan metode pengujian dari kelas dasar dalam rakitan yang berbeda dengan kelas pengujian yang mewarisi.
classCleanupLifecycle EndOfAssembly Jika Anda ingin pembersihan kelas terjadi di akhir kelas, atur ke EndOfClass.

Pengaturan assemblyResolution

Semua pengaturan di bagian ini termasuk dalam elemen assemblyResolution.

Entri Bawaan Deskripsi
Jalur Tidak Anda dapat menentukan jalur untuk rakitan tambahan saat menemukan dan menjalankan pengujian unit. Misalnya, gunakan jalur ini untuk rakitan dependensi yang tidak berada di direktori yang sama dengan rakitan pengujian. Anda dapat menentukan jalur dalam bentuk { "path": "...", "includeSubDirectories": "true/false" }.

Contoh:

{
  "mstest": {
    "assemblyResolution": {
        { "path": "...", "includeSubDirectories": "true/false" }
    }
  }
}

Pengaturan deployment

Semua pengaturan di bagian ini termasuk dalam elemen deployment.

Entri Bawaan Deskripsi
hapusDirektoriPenempatanSetelahPengujianSelesai benar Untuk mempertahankan direktori penyebaran setelah uji coba, atur nilai ini ke false.
deployTestSourceDependencies benar Menunjukkan apakah referensi sumber pengujian akan disebarkan.
Diaktifkan benar Jika Anda mengatur nilai ke false, item penyebaran yang Anda tentukan dalam metode pengujian Anda tidak disalin ke direktori penyebaran.

Contoh:

{
  "mstest": {
    "deployment": {
        "deleteDeploymentDirectoryAfterTestRunIsComplete": true,
        "deployTestSourceDependencies": true,
        "enabled": true
    }
  }
}

Pengaturan output

Semua pengaturan di bagian ini termasuk dalam elemen output.

Entri Bawaan Deskripsi
captureTrace benar Ambil pesan teks yang berasal dari API Console.Write*, Trace.Write*, dan Debug.Write* yang akan terkait dengan pengujian yang sedang berlangsung.

Contoh:

{
  "mstest": {
    "output": {
        "captureTrace": false
    }
  }
}

Pengaturan parallelism

Semua pengaturan di bagian ini termasuk dalam elemen parallelism.

Entri Bawaan Deskripsi
Diaktifkan salah Aktifkan paralelisasi pengujian.
cakupan kelas Cakupan paralelisasi. Anda dapat mengaturnya ke method. Pengaturan bawaan, class, sesuai dengan menjalankan semua pengujian dari kelas tertentu secara berturutan, tetapi beberapa kelas secara paralel.
Pekerja 0 Jumlah utas/pekerja yang akan digunakan untuk pemrosesan paralel. Nilai default mengacu pada jumlah prosesor pada komputer saat ini.

Contoh:

{
  "mstest": {
    "parallelism": {
        "enabled": true,
        "scope": "method",
        "workers": 32
    }
  }
}

Pengaturan execution

Semua pengaturan di bagian ini termasuk dalam elemen execution.

Entri Bawaan Deskripsi
anggapSumberDataKosongSebagaiInkonklusif salah Saat diatur ke true, sumber data kosong dianggap tidak meyakinkan.
anggapFiturSebagaiTesKhusus salah Untuk menampilkan AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup sebagai entri individual di Visual Studio dan Visual Studio Code Test Explorer dan log .trx, atur nilai ini ke true.
mapTidakKonklusifKeGagal salah Jika pengujian selesai dengan status tidak pasti, pengujian akan diubah menjadi status dilewati di Test Explorer. Jika Anda ingin pengujian yang tidak meyakinkan ditampilkan sebagai gagal, atur nilainya ke true.
petakanTidakDapatDijalankanMenjadiGagal benar Nilai yang menunjukkan apakah hasil yang tidak dapat dijalankan dipetakan sebagai pengujian yang gagal.
Perlakukan Peringatan Pembersihan Kelas Dan Majelis Sebagai Kesalahan salah Untuk melihat kegagalan Anda dalam pembersihan kelas sebagai kesalahan, atur nilai ini ke true.
PerlakukanPeringatanDeteksiSebagaiKesalahan salah Untuk melaporkan peringatan penemuan pengujian sebagai kesalahan, atur nilai ini ke true.

Contoh:

{
  "mstest": {
    "execution": {
        "considerEmptyDataSourceAsInconclusive": false,
        "considerFixturesAsSpecialTests": false,
        "mapInconclusiveToFailed": true,
        "mapNotRunnableToFailed": true,
        "treatClassAndAssemblyCleanupWarningsAsErrors": false,
        "treatDiscoveryWarningsAsErrors": false
    }
  }
}

Pengaturan timeout

Semua pengaturan di bagian ini termasuk dalam elemen timeout.

Entri Bawaan Deskripsi
assemblyCleanup 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode pembersihan perakitan.
inisialisasi perakitan 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode inisialisasi perakitan.
classCleanup 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode pembersihan kelas.
classInitialize 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode inisialisasi kelas.
ujian 0 Tentukan batas waktu pengujian secara global.
testCleanup 0 Tentukan batas waktu secara global untuk setiap instance metode pembersihan pengujian.
inisialisasi pengujian 0 Tentukan secara global batas waktu untuk diterapkan pada setiap instans metode inisialisasi pengujian.
gunakanPembatalanKooperatif salah Ketika diatur ke true, jika batas waktu habis, MSTest hanya akan memicu pembatalan CancellationToken tetapi tidak akan berhenti memantau metode. Perilaku ini lebih berkinerja tetapi bergantung pada pengguna untuk mengalirkan token dengan benar melalui semua jalur.

Nota

[Timeout] atribut yang ditetapkan pada sebuah metode akan menggantikan batas waktu global. Misalnya, [Timeout(1000)] pada metode yang ditandai dengan [AssemblyCleanup] akan menggantikan batas waktu assemblyCleanup global.

Contoh:

{
  "mstest": {
    "timeout": {
        "assemblyCleanup": 0,
        "assemblyInitialize": 0,
        "classCleanup": 0,
        "classInitialize": 0,
        "test": 0,
        "testCleanup": 0,
        "testInitialize": 0,
        "useCooperativeCancellation": false
    }
  }
}

Contoh file testconfig.json

JSON berikut menunjukkan konten file .testconfig.json umum. Salin kode ini dan edit sesuai kebutuhan Anda.

Setiap elemen file bersifat opsional karena memiliki nilai default.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}