Bagikan melalui


Gambaran umum Microsoft.Testing.Platform

Microsoft.Testing.Platform adalah alternatif ringan dan portabel untuk VSTest untuk menjalankan pengujian di semua konteks, termasuk alur integrasi berkelanjutan (CI), CLI, Visual Studio Test Explorer, dan VS Code Test Explorer. Microsoft.Testing.Platform disematkan langsung dalam proyek pengujian Anda, dan tidak ada dependensi aplikasi lain, seperti vstest.console atau dotnet test yang diperlukan untuk menjalankan pengujian Anda.

Microsoft.Testing.Platform adalah sumber terbuka. Anda dapat menemukan kode Microsoft.Testing.Platform di repositori GitHub microsoft/testfx.

Prinsip Microsoft.Testing.Platform

Platform pengujian baru ini dibangun berdasarkan pengalaman tim Pengujian Pengalaman Pengembang .NET dan bertujuan untuk mengatasi tantangan yang dihadapi sejak rilis .NET Core pada tahun 2016. Meskipun terdapat tingkat kompatibilitas yang tinggi antara .NET Framework dan .NET Core/.NET, beberapa fitur utama seperti sistem plugin dan faktor bentuk baru yang mungkin dari kompilasi .NET telah membuatnya kompleks untuk dikembangkan atau sepenuhnya didukung oleh fitur runtime baru pada arsitektur platform VSTest saat ini.

Faktor pendorong utama untuk evolusi platform pengujian baru dirinci dalam hal berikut:

  • Determinisme: Memastikan bahwa menjalankan pengujian yang sama dalam konteks yang berbeda (lokal, CI) akan menghasilkan hasil yang sama. Runtime baru tidak bergantung pada refleksi atau fitur runtime .NET dinamis lainnya untuk mengoordinasikan eksekusi pengujian.

  • Transparansi Runtime: Runtime pengujian tidak mengganggu kode kerangka kerja pengujian, tidak membuat konteks terisolasi seperti AppDomain atau AssemblyLoadContext, dan tidak menggunakan refleksi atau pemecah perakitan kustom.

  • Registrasi ekstensi pada waktu kompilasi: Ekstensi, seperti kerangka kerja pengujian dan ekstensi di/dari proses, didaftarkan selama waktu kompilasi untuk menjamin determinisme dan memfasilitasi deteksi inkonsistensi.

  • Tanpa Dependensi: Inti platform adalah satu assembly .NET, Microsoft.Testing.Platform.dll, yang tidak memiliki ketergantungan selain runtime yang didukung.

  • Hostable: Runtime pengujian dapat dihosting di aplikasi .NET apa pun. Meskipun aplikasi konsol umumnya digunakan untuk menjalankan pengujian, Anda dapat membuat aplikasi pengujian di semua jenis aplikasi .NET. Ini memungkinkan Anda menjalankan pengujian dalam konteks khusus, seperti perangkat atau browser, di mana mungkin ada batasan.

  • Mendukung semua faktor bentuk .NET: Mendukung faktor bentuk .NET saat ini dan yang akan datang, termasuk Native AOT.

  • Performant: Menemukan keseimbangan yang tepat antara fitur dan titik ekstensi untuk menghindari membebani runtime dengan kode non-fundamental. Platform pengujian baru dirancang untuk "mengatur" uji coba, daripada memberikan detail implementasi tentang cara melakukannya.

  • Cukup fleksibel untuk diperluas: Platform baru dibangun di atas titik ekstensibilitas untuk memungkinkan kustomisasi maksimum dari eksekusi saat runtime. Ini memungkinkan Anda untuk mengonfigurasi host proses pengujian, mengamati proses pengujian, dan menggunakan informasi dari kerangka kerja pengujian dalam proses host pengujian.

  • Penyebaran modul tunggal: Fitur hostabilitas memungkinkan model penyebaran modul tunggal, di mana satu hasil kompilasi dapat digunakan untuk mendukung semua titik ekstensibilitas, baik di luar proses maupun dalam proses, tanpa perlu mengirim modul yang dapat dieksekusi yang berbeda.

Kerangka kerja pengujian yang didukung

  • MSTest. Di MSTest, dukungan Microsoft.Testing.Platform dilakukan melalui MSTest runner.
  • NUnit. Di NUnit, Microsoft.Testing.Platform didukung melalui NUnit runner .
  • xUnit.net: Dalam xUnit.net, dukungan Microsoft.Testing.Platform dilakukan melalui xUnit.net runner .
  • TUnit: sepenuhnya dibangun di atas Microsoft.Testing.Platform, untuk informasi selengkapnya, lihat dokumentasi TUnit.

Menjalankan dan memperbaiki pengujian

Microsoft.Testing.Platform proyek pengujian dibangun sebagai executable yang dapat dijalankan (atau di-debug) secara langsung. Tidak ada konsol atau perintah tambahan untuk pengujian. Aplikasi keluar dengan kode keluar selain nol jika ada kesalahan, yang khas untuk sebagian besar program yang dapat dieksekusi. Untuk informasi selengkapnya tentang kode keluar yang diketahui, lihat kode keluar Microsoft.Testing.Platform.

Saran

Anda dapat mengabaikan kode keluar tertentu menggunakan opsi baris perintah --ignore-exit-code.

Anda juga dapat mengatur opsi baris perintah yang berlaku untuk proyek pengujian tertentu dalam file proyek menggunakan properti TestingPlatformCommandLineArguments MSBuild. Salah satu kasus penggunaan umum adalah untuk proyek pengujian yang mengabaikan semua pengujian, yang biasanya akan keluar dengan kode keluar 8 (sesi pengujian menjalankan nol pengujian). Dalam skenario ini, Anda bisa menambahkan yang berikut ini di bawah PropertyGroup dalam file proyek Anda:

<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>

Penting

Secara default, Microsoft.Testing.Platform mengumpulkan telemetri. Untuk informasi lebih lanjut dan opsi untuk berhenti berlangganan, lihat telemetri Microsoft.Testing.Platform.

Menerbitkan proyek pengujian menggunakan dotnet publish dan menjalankan aplikasi secara langsung adalah cara lain untuk menjalankan pengujian Anda. Misalnya, menjalankan ./Contoso.MyTests.exe. Dalam beberapa skenario, juga layak untuk menggunakan dotnet build untuk menghasilkan yang dapat dieksekusi, tetapi mungkin ada kasus tepi yang perlu dipertimbangkan, seperti Native AOT.

Gunakan dotnet run

Perintah dotnet run dapat digunakan untuk membangun dan menjalankan proyek pengujian Anda. Ini adalah yang paling mudah, meskipun kadang-kadang paling lambat, cara untuk menjalankan tes Anda. Menggunakan dotnet run praktis saat Anda mengedit dan menjalankan pengujian secara lokal, karena memastikan bahwa proyek pengujian dibangun kembali saat diperlukan. dotnet run juga akan secara otomatis menemukan proyek di folder saat ini.

dotnet run --project Contoso.MyTests

Untuk informasi selengkapnya tentang dotnet run, lihat perintah 'dotnet run'.

Gunakan dotnet exec

Perintah dotnet exec atau dotnet digunakan untuk menjalankan (atau menjalankan) proyek pengujian yang sudah dibangun, ini adalah alternatif untuk menjalankan aplikasi secara langsung. dotnet exec memerlukan jalur ke dll proyek pengujian bawaan.

dotnet exec Contoso.MyTests.dll

atau

dotnet Contoso.MyTests.dll

Nota

Menyediakan jalur ke proyek pengujian yang dapat dieksekusi (*.exe) menghasilkan kesalahan:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

Untuk informasi selengkapnya tentang dotnet exec, lihat dotnet exec.

Gunakan dotnet test

Microsoft.Testing.Platform menawarkan lapisan kompatibilitas dengan vstest.console.exe dan dotnet test memastikan Anda dapat menjalankan pengujian seperti sebelumnya sambil mengaktifkan skenario eksekusi baru.

dotnet test Contoso.MyTests.dll

Pilihan

Daftar di bawah ini hanya menjelaskan opsi platform. Untuk melihat opsi tertentu yang dibawa oleh setiap ekstensi, lihat halaman dokumentasi ekstensi atau gunakan opsi --help.

  • @

    Menentukan nama file respons. Nama file respons harus segera mengikuti karakter @ tanpa spasi kosong antara karakter @ dan nama file respons.

    Opsi dalam file respons ditafsirkan seolah-olah ada di tempat tersebut di baris perintah. Setiap argumen dalam file respons harus dimulai dan berakhir pada baris yang sama. Anda tidak dapat menggunakan karakter garis miring terbalik () untuk menggabungkan baris. Menggunakan file respons membantu untuk perintah yang sangat panjang yang mungkin melebihi batas terminal. Anda dapat menggabungkan file respons dengan argumen baris perintah secara langsung. Misalnya:

    ./TestExecutable.exe @"filter.rsp" --timeout 10s
    

    di mana filter.rsp dapat memiliki konten berikut:

    --filter "A very long filter"
    

    Atau satu file rsp dapat digunakan untuk menentukan batas waktu dan filter sebagai berikut:

    ./TestExecutable.exe @"arguments.rsp"
    
    --filter "A very long filter"
    --timeout 10s
    
  • --config-file

    Menentukan file testconfig.json.

  • --diagnostic

    Mengaktifkan pembuatan log diagnostik. Tingkat log default adalah Trace. File ditulis dalam direktori output dengan format nama berikut, log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

    Memaksa pencatat file bawaan untuk menulis log secara sinkron. Berguna untuk skenario di mana Anda tidak ingin kehilangan entri log apa pun (jika proses crash). Ini memperlambat eksekusi pengujian.

  • --diagnostic-output-directory

    Direktori keluaran untuk pencatatan diagnostik, jika tidak ditentukan, file akan dihasilkan dalam direktori default TestResults.

  • --diagnostic-output-fileprefix

    Awalan untuk nama file log. Bawaan ke "log_".

  • --diagnostic-verbosity

    Menentukan tingkat verbositas saat sakelar --diagnostic digunakan. Nilai yang tersedia adalah Trace, Debug, Information, Warning, Error, atau Critical.

  • --exit-on-process-exit

    Hentikan proses pengujian jika proses dependen berhenti. PID harus disediakan.

  • --help

    Mencetak deskripsi cara menggunakan perintah.

  • --ignore-exit-code

    Memungkinkan beberapa kode keluar bukan nol diabaikan atau sebaliknya dikembalikan sebagai 0. Untuk informasi selengkapnya, lihat Abaikan kode keluar tertentu.

  • --info

    Menampilkan informasi tingkat lanjut tentang Aplikasi Uji .NET seperti:

    • Platform tersebut.
    • Lingkungan.
    • Setiap penyedia baris perintah terdaftar, seperti name, version, description, dan options.
    • Setiap alat terdaftar, seperti command, name, version, description, dan semua penyedia baris perintah.

    Fitur ini digunakan untuk memahami ekstensi yang akan mendaftarkan opsi baris perintah yang sama atau perubahan opsi yang tersedia antara beberapa versi ekstensi (atau platform).

  • --list-tests

    Mencantumkan pengujian yang tersedia. Pengujian tidak akan dijalankan.

  • --maximum-failed-tests

    Menentukan jumlah maksimum kegagalan pengujian yang, ketika tercapai, akan menghentikan eksekusi pengujian. Dukungan untuk sakelar ini memerlukan pengembang kerangka kerja untuk mengimplementasikan kemampuan IGracefulStopTestExecutionCapability. Kode keluar saat mencapai jumlah kegagalan pengujian adalah 13. Untuk informasi selengkapnya, lihat kode keluar Microsoft.Testing.Platform di dan.

    Nota

    Fitur ini tersedia di Microsoft.Testing.Platform yang dimulai dengan versi 1.5.

  • --minimum-expected-tests

    Menentukan jumlah minimum pengujian yang diharapkan untuk dijalankan. Secara default, setidaknya satu pengujian diharapkan berjalan.

  • --results-directory

    Direktori tempat hasil pengujian akan ditempatkan. Jika direktori yang ditentukan tidak ada, direktori tersebut akan dibuat. Defaultnya adalah TestResults di direktori yang berisi aplikasi pengujian.

  • --timeout

    Batas waktu eksekusi pengujian global. Mengambil satu argumen sebagai string dalam format <value>[h|m|s] di mana <value> mengambang.

Integrasi MSBuild

Paket NuGet Microsoft.Testing.Platform.MSBuild menyediakan berbagai integrasi untuk Microsoft.Testing.Platform dengan MSBuild:

  • Dukungan untuk dotnet test. Untuk informasi selengkapnya, lihat Pengujian dengan pengujian dotnet.
  • Dukungan untuk ProjectCapability diperlukan oleh Visual Studio dan Visual Studio Code Test Explorers.
  • Pembuatan otomatis titik masuk (metode Main).
  • Pembuatan otomatis file konfigurasi.

Nota

Integrasi ini berfungsi dengan cara transitif (proyek yang mereferensikan proyek lain yang merujuk paket ini akan berperilaku seolah-olah mereferensikan paket) dan dapat dinonaktifkan melalui properti MSBuild IsTestingPlatformApplication.

Lihat juga