Hasilkan pengujian unit untuk pengujian fuzz dengan menggunakan IntelliTest

IntelliTest menjelajahi kode .NET Anda untuk menghasilkan data pengujian dan serangkaian pengujian unit. Untuk setiap pernyataan dalam kode, dihasilkan input pengujian yang akan menjalankan pernyataan tersebut. Analisis kasus dilakukan untuk setiap cabang kondisional dalam kode. Misalnya, pernyataan if, pertegasan, dan semua operasi yang dapat melempar pengecualian dianalisis. Analisis ini digunakan untuk menghasilkan data pengujian untuk pengujian unit berparameter untuk setiap metode Anda, membuat pengujian unit dengan cakupan kode tinggi. Anggap saja sebagai pengujian fuzz cerdas yang memangkas input dan kasus pengujian ke apa yang menjalankan semua cabang logika Anda dan memeriksa pengecualian.

Saat Anda menjalankan IntelliTest, Anda dapat dengan mudah melihat pengujian mana yang gagal dan menambahkan kode yang diperlukan untuk memperbaikinya. Anda dapat memilih pengujian mana yang dihasilkan untuk disimpan ke dalam proyek pengujian untuk menyediakan rangkaian regresi. Saat Anda mengubah kode, jalankan kembali IntelliTest untuk menjaga pengujian yang dihasilkan tetap sinkron dengan perubahan kode Anda.

Ketersediaan dan ekstensi

Perintah menu Buat IntelliTest dan Jalankan IntelliTest:

  • Hanya tersedia di Edisi Enterprise Visual Studio.

  • Hanya mendukung kode C# yang menargetkan .NET Framework.

    Catatan

    Untuk dukungan .NET 6 dengan IntelliTest, Anda dapat menginstal versi Pratinjau Visual Studio Enterprise dan melihat pengumuman .

  • Dapat diperluas dan mendukung memancarkan pengujian dalam format MSTest, MSTest V2, NUnit, dan xUnit.

  • Tidak mendukung konfigurasi x64.

Jelajahi: Gunakan IntelliTest untuk menjelajahi kode Anda dan menghasilkan pengujian unit

Untuk menghasilkan pengujian unit, jenis Anda harus publik.

  1. Buka solusi Anda di Visual Studio lalu buka file kelas yang memiliki metode yang ingin Anda uji.

  2. Klik kanan pada metode dan pilih Jalankan IntelliTest untuk menghasilkan pengujian unit untuk kode dalam metode Anda.

    Screenshot of right click on method to generate unit tests.

    Screenshot of right click on method to generate unit tests.

    IntelliTest menjalankan kode Anda berkali-kali dengan input yang berbeda. Setiap eksekusi diwakili dalam tabel yang menunjukkan data pengujian input dan output atau pengecualian yang dihasilkan.

    Screenshot of Exploration Results window.

    Screenshot of Exploration Results window.

Untuk menghasilkan pengujian unit untuk semua metode publik di kelas, cukup klik kanan di kelas daripada metode tertentu, lalu pilih Jalankan IntelliTest. Gunakan daftar drop-down di jendela Hasil Eksplorasi untuk menampilkan pengujian unit dan data input untuk setiap metode di kelas.

Screenshot of test results to view from list.

Screenshot of test results to view from list.

Untuk pengujian yang lolos, periksa apakah hasil yang dilaporkan di kolom hasil sesuai dengan harapan Anda untuk kode Anda. Untuk pengujian yang gagal, perbaiki kode Anda sebagaimana mewajibkan. Kemudian jalankan kembali IntelliTest untuk memvalidasi perbaikan.

Persist: Simpan pengujian unit sebagai rangkaian regresi

  1. Pilih baris data yang ingin Anda simpan dengan pengujian unit berparameter ke dalam proyek pengujian.

    Screenshot of Save test results.

    Screenshot of Save test results.

    Anda dapat melihat proyek pengujian dan pengujian unit berparameter yang telah dibuat - pengujian unit individual, yang sesuai dengan setiap baris, disimpan dalam file .g.cs dalam proyek pengujian, dan pengujian unit berparameter disimpan dalam file .cs yang sesuai. Anda dapat menjalankan pengujian unit dan melihat hasilnya dari Test Explorer seperti yang Anda lakukan untuk pengujian unit apa pun yang Anda buat secara manual.

    Screenshot of saved tests in Solution Explorer.

    Screenshot of saved tests in Solution Explorer.

    Referensi yang diperlukan juga ditambahkan ke proyek pengujian.

    Jika kode metode berubah, jalankan kembali IntelliTest untuk menjaga pengujian unit tetap sinkron dengan perubahan.

Bantuan: Gunakan IntelliTest untuk memfokuskan eksplorasi kode

  1. Jika Anda memiliki kode yang lebih kompleks, IntelliTest membantu Anda memfokuskan eksplorasi kode Anda. Misalnya, jika Anda memiliki metode yang memiliki antarmuka sebagai parameter, dan ada lebih dari satu kelas yang mengimplementasikan antarmuka tersebut, IntelliTest menemukan kelas tersebut dan melaporkan peringatan.

    Lihat peringatan untuk memutuskan apa yang ingin Anda lakukan.

    Screenshot of View warnings.

    Screenshot of View warnings.

  2. Setelah Anda menyelidiki kode dan memahami apa yang ingin Anda uji, Anda dapat memperbaiki peringatan untuk memilih kelas mana yang akan digunakan untuk menguji antarmuka.

    Screenshot of Fix warning.

    Screenshot of Fix warning.

    Pilihan ini ditambahkan ke dalam file PexAssemblyInfo.cs.

    [assembly: PexUseType(typeof(Camera))]

  3. Sekarang Anda dapat menjalankan ulang IntelliTest untuk menghasilkan data pengujian dan pengujian unit berparameter hanya menggunakan kelas yang Anda perbaiki.

    Screenshot of Rerun IntelliTest after fix.

    Screenshot of Rerun IntelliTest after fix.

Tentukan: Gunakan IntelliTest untuk memvalidasi properti kebenaran yang Anda tentukan dalam kode

Tentukan hubungan umum antara input dan output yang Anda inginkan untuk divalidasi oleh pengujian unit yang dihasilkan. Spesifikasi ini dirangkum dalam metode yang terlihat seperti metode pengujian tetapi diukur secara universal. Ini adalah metode pengujian unit berparameter, dan pernyataan apa pun yang Anda buat harus menahan semua nilai input yang mungkin dapat dihasilkan IntelliTest.

T & J

Q: Dapatkah Anda menggunakan IntelliTest untuk kode yang tidak dikelola?

A: Tidak, IntelliTest hanya berfungsi dengan kode terkelola.

Q: Kapan tes yang dihasilkan lulus atau gagal?

A: Ini lolos seperti pengujian unit lainnya jika tidak ada pengecualian yang terjadi. Ini gagal jika ada pernyataan yang gagal, atau jika kode yang sedang diuji melemparkan pengecualian yang tidak tertangani.

Jika Anda memiliki pengujian yang dapat lulus jika pengecualian tertentu dilemparkan, Anda dapat mengatur salah satu atribut berikut berdasarkan persyaratan Anda pada metode pengujian, kelas pengujian, atau tingkat perakitan:

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

Q: Dapatkah saya menambahkan asumsi ke pengujian unit berparameter?

A: Ya, gunakan asumsi untuk menentukan data pengujian mana yang tidak diperlukan untuk pengujian unit untuk metode tertentu. Gunakan kelas PexAssume untuk menambahkan asumsi. Misalnya, Anda dapat menambahkan asumsi bahwa variabel lengths bukanlah null seperti ini:

PexAssume.IsNotNull(lengths);

Jika Anda menambahkan asumsi dan menjalankan ulang IntelliTest, data pengujian yang tidak lagi relevan akan dihapus.

Q: Dapatkah saya menambahkan pernyataan ke pengujian unit berparameter?

A: Ya, IntelliTest akan memeriksa bahwa apa yang Anda tegaskan dalam pernyataan Anda sebenarnya benar ketika menjalankan pengujian unit. Gunakan kelas PexAssert atau API pernyataan yang dilengkapi dengan kerangka kerja pengujian untuk menambahkan pernyataan. Misalnya, Anda dapat menambahkan pernyataan bahwa dua variabel sama.

PexAssert.AreEqual(a, b);

Jika Anda menambahkan pernyataan dan menjalankan ulang IntelliTest, itu akan memeriksa bahwa pernyataan Anda valid dan pengujian gagal jika tidak.

Q: Dapatkah saya menghasilkan pengujian unit berparameter tanpa menjalankan IntelliTest terlebih dahulu?

A: Ya, klik kanan di kelas atau metode, lalu pilih Buat IntelliTest.

Screenshot of Create IntelliTest.

Screenshot of Create IntelliTest.

Terima format default untuk menghasilkan pengujian Anda, atau ubah bagaimana proyek dan pengujian Anda diberi nama. Anda dapat membuat proyek pengujian baru atau menyimpan pengujian Anda ke proyek yang sudah ada.

Screenshot of Create IntelliTest with MSTest default.

Screenshot of Create IntelliTest with MSTest default.

Q: Dapatkah saya menggunakan kerangka kerja pengujian unit lain dengan IntelliTest?

J: Ya, ikuti langkah-langkah ini untuk menemukan dan menginstal kerangka kerja lain. Ekstensi kerangka kerja pengujian juga tersedia di Visual Studio Marketplace, misalnya, NUnit Test Generator.

Setelah Anda memulai ulang Visual Studio dan membuka kembali solusi Anda, klik kanan di kelas atau metode, lalu pilih Buat IntelliTest. Pilih kerangka kerja yang terinstal di sini:

Screenshot of Select other unit test framework for IntelliTest.

Screenshot of Select other unit test framework for IntelliTest.

Kemudian jalankan IntelliTest untuk menghasilkan pengujian unit individual dalam file .g.cs yang sesuai.

Q: Dapatkah saya mempelajari lebih lanjut tentang bagaimana pengujian dihasilkan?

A: Ya, untuk mendapatkan gambaran umum tingkat tinggi, baca postingan blog ini.