Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.
Prasyarat
Tutorial ini berfungsi dengan solusi yang Anda buat di Buat pustaka kelas .NET.
Membuat proyek pengujian unit
Pengujian unit menyediakan pengujian perangkat lunak secara otomatis dalam proses pengembangan dan penerbitan Anda. MSTest adalah salah satu dari tiga kerangka kerja pengujian yang dapat Anda pilih. Yang lain adalah xUnit dan nUnit.
Mulai Visual Studio.
Buka solusi
ClassLibraryProjectsyang Anda buat di Buat pustaka kelas .NET.Tambahkan proyek pengujian unit baru bernama "StringLibraryTest" ke solusi.
Klik kanan pada solusi di Penjelajah Solusi dan pilih Tambahkan>Proyek baru.
Pada halaman Tambahkan proyek baru , masukkan mstest di kotak pencarian. Pilih C# atau Visual Basic dari daftar Bahasa, lalu pilih Semua platform dari daftar Platform.
Pilih templat MSTest Test Project , lalu pilih Berikutnya.
Pada halaman Atur proyek baru Anda, masukkan StringLibraryTest di kotak Nama proyek. Kemudian pilih Berikutnya.
Pada halaman Informasi tambahan, pilih .NET 10 di kotak Framework, pilih Microsoft.Testing.Platform untuk runner Test, lalu pilih Buat.
Masukkan informasi tambahan untuk MSTest Test Project
Visual Studio membuat proyek dan membuka file kelas di jendela kode dengan kode berikut. Jika bahasa yang ingin Anda gunakan tidak ditampilkan, ubah pemilih bahasa di bagian atas halaman.
namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestMethod1() { } } }Imports Microsoft.VisualStudio.TestTools.UnitTesting Namespace StringLibraryTest <TestClass> Public Class Test1 <TestMethod> Sub TestSub() End Sub End Class End NamespaceKode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:
- Termasuk Microsoft.VisualStudio.TestTools.UnitTesting dalam file proyek StringLibraryTest di C#, dan mengimpor Microsoft.VisualStudio.TestTools.UnitTesting di Visual Basic.
- Menerapkan atribut ke kelas .
- Menerapkan atribut TestMethodAttribute untuk menentukan
TestMethod1di C# atauTestSubdi Visual Basic.
Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit berjalan.
Mulai Visual Studio Code.
Buka solusi
ClassLibraryProjectsyang Anda buat di Buat pustaka kelas .NET.Dari Penjelajah Solusi, pilih Proyek Baru, atau dari Palet Perintah pilih .NET: Proyek Baru.
Pilih MSTest Test Project, beri nama "StringLibraryTest", pilih direktori default, dan pilih Buat Proyek.
Templat proyek membuat StringLibraryTest/Test1.cs dengan kode berikut:
namespace StringLibraryTest; [TestClass] public class Test1 { [TestMethod] public void TestMethod1() { } }Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:
- Ini menerapkan atribut ke kelas .
- Ini menerapkan atribut untuk mendefinisikan sesuatu.
- Ini mengimpor namespace tersebut, yang berisi jenis yang digunakan untuk pengujian unit. Namespace diimpor melalui arahan di GlobalUsings.cs.
Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dipanggil.
Buka terminal dan navigasikan ke folder tutorial yang berisi proyek StringLibrary dan ShowCase.
Buat proyek pengujian MSTest baru:
dotnet new mstest -n StringLibraryTestTemplat proyek membuat StringLibraryTest/Test1.cs dengan kode berikut:
namespace StringLibraryTest; [TestClass] public class Test1 { [TestMethod] public void TestMethod1() { } }Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:
- Ini menerapkan atribut ini ke kelas ini.
- Ini menerapkan atribut untuk menentukan objek tertentu.
- Ini mengimpor namespace, yang berisi tipe yang digunakan untuk pengujian unit.
Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dipanggil.
Menambahkan referensi proyek
Agar proyek pengujian berfungsi dengan kelas , tambahkan referensi dalam proyek ke proyek.
Dalam Penjelajah Solusi, klik kanan simpul Dependencies dari proyek StringLibraryTest dan pilih Tambahkan Referensi Proyek dari menu konteks.
Dalam dialog Manajer Referensi , pilih kotak di samping StringLibrary.
Tambahkan StringLibrary sebagai referensi proyek untuk StringLibraryTest.
Pilih OK.
Dari Penjelajah Solusi klik kanan pada Proyek 'StringLibraryTest' dan pilih Tambahkan Referensi Proyek.
Pilih "StringLibrary".
Navigasikan ke folder StringLibraryTest dan tambahkan referensi proyek:
cd StringLibraryTest dotnet add reference ../StringLibrary/StringLibrary.csproj
Menambahkan dan menjalankan metode pengujian unit
Saat pengujian unit berjalan, setiap metode yang ditandai dengan atribut di kelas yang ditandai dengan atribut dijalankan secara otomatis. Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode berhasil.
Tes yang paling umum memanggil anggota kelas tersebut. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Beberapa metode kelas yang paling sering disebut diperlihatkan dalam tabel berikut:
| Metode pernyataan | Fungsi |
|---|---|
Assert.AreEqual |
Memverifikasi bahwa dua nilai atau objek sama. Pernyataan gagal jika nilai atau objek tidak sama. |
Assert.AreSame |
Memverifikasi bahwa dua variabel objek merujuk ke objek yang sama. Pernyataan gagal jika variabel merujuk ke objek yang berbeda. |
Assert.IsFalse |
Memverifikasi bahwa suatu kondisi adalah . Pernyataan gagal jika kondisinya adalah . |
Assert.IsNotNull |
Memverifikasi bahwa objek bukan . Asersi akan gagal jika objek adalah . |
Anda juga dapat menggunakan metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan akan dibangkitkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.
Dalam menguji metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk mengembalikan dalam kasus ini, sehingga Anda dapat memanggil metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk mengembalikan dalam kasus ini, sehingga Anda dapat memanggil metode .
Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong () dan string. String kosong adalah string yang tidak memiliki karakter dan yang panjangnya 0. String adalah string yang belum diinisialisasi. Anda dapat memanggilnya langsung sebagai metode statis dan meneruskan satu argumen. Atau Anda dapat memanggil sebagai metode ekstensi pada variabel yang ditetapkan ke .
Anda akan menentukan tiga metode, yang masing-masing memanggil metode untuk setiap elemen dalam array string. Anda akan memanggil kelebihan beban metode yang memungkinkan Anda menentukan pesan kesalahan yang akan ditampilkan jika terjadi kegagalan pengujian. Pesan mengidentifikasi string yang menyebabkan kegagalan.
Untuk membuat metode pengujian:
Di jendela kode Test1.cs atau Test1.vb , ganti kode dengan kode berikut:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = ["Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = ["alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = [string.Empty, null]; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, $"Expected for '{word ?? "<null>"}': false; Actual: {result}"); } } } }Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports UtilityLibraries Namespace StringLibraryTest <TestClass> Public Class UnitTest1 <TestMethod> Public Sub TestStartsWithUpper() ' Tests that we expect to return true. Dim words() As String = {"Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"} For Each word In words Dim result As Boolean = word.StartsWithUpper() Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}") Next End Sub <TestMethod> Public Sub TestDoesNotStartWithUpper() ' Tests that we expect to return false. Dim words() As String = {"alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "} For Each word In words Dim result As Boolean = word.StartsWithUpper() Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}") Next End Sub <TestMethod> Public Sub DirectCallWithNullOrEmpty() ' Tests that we expect to return false. Dim words() As String = {String.Empty, Nothing} For Each word In words Dim result As Boolean = StringLibrary.StartsWithUpper(word) Assert.IsFalse(result, $"Expected for '{If(word Is Nothing, "<null>", word)}': false; Actual: {result}") Next End Sub End Class End NamespacePengujian karakter huruf besar dalam metode mencakup alfa huruf kapital Yunani (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalam metode mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).
Pada bilah menu, pilih Simpan FileTest1.cs Sebagai atau Simpan FileTest1.vb Sebagai. Dalam dialog
Simpan File Sebagai , pilih panah di samping tombol Simpan, dan pilih Simpan dengan Pengodean .Dalam dialog Konfirmasi Simpan Sebagai, pilih tombol Ya untuk menyimpan file.
Dalam dialog Opsi Penyimpanan Tingkat Lanjut , pilih Unicode (UTF-8 dengan tanda tangan) - Halaman kode 65001 dari daftar drop-down Pengodean dan pilih OK.
Jika Anda gagal menyimpan kode sumber sebagai file yang dikodekan UTF8, Visual Studio mungkin menyimpannya sebagai file ASCII. Ketika itu terjadi, runtime tidak secara akurat mendekode karakter UTF8 di luar rentang ASCII, dan hasil pengujian tidak benar.
Pada bilah menu, pilih UjiJalankan Semua Pengujian. Jika jendela
Test Explorer tidak terbuka, buka dengan memilih Test Test Explorer . Ketiga pengujian tercantum di bagian Passed Tests, dan bagian Ringkasan melaporkan hasil pengujian.Jendela Test Explorer dengan tes yang lulus
Buka StringLibraryTest/Test1.cs dan ganti semua kode dengan kode berikut.
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = ["Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = ["alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = [string.Empty, null]; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, $"Expected for '{word ?? "<null>"}': false; Actual: {result}"); } } } }Pengujian karakter huruf besar dalam metode mencakup alfa huruf kapital Yunani (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalam metode mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).
Simpan perubahan Anda.
Membuat dan menjalankan pengujian Anda
Di Penjelajah Solusi, klik kanan solusi dan pilih Build atau dari Palet Perintah, pilih .NET: Build.
Pilih jendela Pengujian , pilih Jalankan Pengujian atau dari Palet Perintah, pilih Uji: Jalankan semua Pengujian.
Buka StringLibraryTest/Test1.cs dan ganti semua kode dengan kode berikut:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = ["Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = ["alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = [string.Empty, null]; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, $"Expected for '{word ?? "<null>"}': false; Actual: {result}"); } } } }Pengujian karakter huruf besar dalam metode mencakup alfa huruf kapital Yunani (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalam metode mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).
Simpan perubahan Anda dan jalankan pengujian:
dotnet testTes harus lulus.
Menangani kegagalan pengujian
Jika Anda melakukan pengembangan berbasis pengujian (TDD), Anda menulis pengujian terlebih dahulu dan mereka gagal saat pertama kali menjalankannya. Kemudian Anda menambahkan kode ke aplikasi yang membuat pengujian berhasil. Untuk tutorial ini, Anda membuat pengujian setelah menulis kode aplikasi yang divalidasinya, sehingga Anda belum melihat pengujian gagal. Untuk memvalidasi bahwa pengujian gagal ketika Anda mengharapkannya gagal, tambahkan nilai yang tidak valid ke input pengujian.
Ubah array dalam metode untuk menyertakan string "Kesalahan".
string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
Jalankan pengujian dengan memilih UjiJalankan Semua Pengujian dari bilah menu. Jendela
Test Explorer menunjukkan bahwa dua pengujian berhasil dan satu gagal. jendela Test Explorer dengan pengujian yang gagal
Pilih pengujian yang gagal, .
Jendela Test Explorer menampilkan pesan yang dihasilkan oleh pernyataan: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar." Karena kegagalan, string dalam array setelah "Kesalahan" tidak diuji.
jendela Test Explorer memperlihatkan kegagalan pernyataan IsFalse
Jalankan pengujian dengan mengklik kesalahan hijau di samping pengujian di editor.
Output menunjukkan bahwa pengujian tersebut gagal, dan memberikan pesan kesalahan: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.
Jalankan pengujian:
dotnet testOutput menunjukkan bahwa pengujian gagal, dan memberikan pesan kesalahan untuk pengujian yang gagal: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktualnya: benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.
Hapus string "Kesalahan" yang Anda tambahkan.
Jalankan ulang tes dan tes berhasil.
Menguji versi rilis perpustakaan
Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian sekali lagi pada build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.
Untuk menguji versi rilis:
Di toolbar Visual Studio, ubah konfigurasi build dari Debug menjadi Release.
Di Penjelajah Solusi, klik kanan proyek StringLibrary dan pilih Build dari menu konteks untuk mengkompilasi ulang pustaka.
Jalankan pengujian unit dengan memilih UjiJalankan Semua Pengujian dari bilah menu. Tes lulus.
Jalankan pengujian dengan konfigurasi build Rilis:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Tes lulus.
Jalankan pengujian dengan konfigurasi build Rilis:
dotnet test --configuration Release
Tes lulus.
Tes penyaringan kesalahan
Jika Anda menggunakan Visual Studio sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan di Tutorial: Debug aplikasi konsol .NET untuk men-debug kode menggunakan proyek pengujian unit Anda. Alih-alih memulai proyek aplikasi ShowCase , klik kanan proyek StringLibraryTests , dan pilih Debug Tests dari menu konteks.
Visual Studio memulai proyek pengujian dengan debugger terlampir. Eksekusi berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.
Jika Anda menggunakan Visual Studio Code sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan di Debug aplikasi konsol .NET untuk men-debug kode menggunakan proyek pengujian unit Anda. Alih-alih memulai proyek aplikasi ShowCase, buka StringLibraryTest/Test1.cs, dan pilih Debug Uji Coba dalam file saat ini antara baris 7 dan 8. Jika Anda tidak dapat menemukannya, tekan CtrlShiftP untuk membuka palet perintah dan masukkan Jendela Muat Ulang.
Visual Studio Code memulai proyek pengujian dengan debugger terlampir. Eksekusi akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.
Sumber daya tambahan
- Dasar-dasar Pengujian Unit - Visual Studio
- pengujian unit dalam .NET
- pengujian unit dalam .NET
Membersihkan sumber daya
GitHub secara otomatis menghapus Codespace Anda setelah 30 hari tidak aktif. Jika Anda berencana untuk menjelajahi lebih banyak tutorial di seri ini, Anda dapat membiarkan Codespace Anda tetap tersedia. Jika Anda siap untuk mengunjungi situs .NET untuk mengunduh SDK .NET, Anda dapat menghapus Codespace Anda. Untuk menghapus Codespace Anda, buka jendela browser dan navigasikan ke Codespace Anda. Anda melihat daftar codespace Anda di jendela. Pilih tiga titik () dalam entri untuk ruang kode tutorial pembelajaran. Lalu pilih "Hapus".
Langkah selanjutnya
Dalam tutorial ini, Anda unit menguji pustaka kelas. Anda dapat membuat pustaka tersedia untuk orang lain dengan menerbitkannya ke NuGet sebagai paket. Untuk mempelajari caranya, ikuti tutorial NuGet:
Membuat dan menerbitkan paket menggunakan CLI dotnet
Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:
Menginstal dan menggunakan paket menggunakan dotnet CLI
Pustaka tidak harus didistribusikan sebagai paket. Ini dapat dibundel dengan aplikasi konsol yang menggunakannya. Untuk mempelajari cara menerbitkan aplikasi konsol, lihat tutorial sebelumnya dalam seri ini: