Tutorial: Menguji pustaka kelas .NET dengan .NET menggunakan Visual Studio
Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.
Prasyarat
- Tutorial ini berfungsi dengan solusi yang Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio.
Membuat proyek pengujian unit
Pengujian unit menyediakan pengujian perangkat lunak otomatis selama 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 yang
ClassLibraryProjects
Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio.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 Konfigurasikan proyek baru Anda, masukkan StringLibraryTest di kotak Nama proyek. Kemudian pilih Berikutnya.
Pada halaman Informasi tambahan, pilih .NET 8 (Pratinjau) di kotak Kerangka Kerja . Kemudian pilih Buat.
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 class UnitTest1 { [TestMethod] public void TestMethod1() { } }
Imports Microsoft.VisualStudio.TestTools.UnitTesting Namespace StringLibraryTest <TestClass> Public Class UnitTest1 <TestMethod> Sub TestSub() End Sub End Class End Namespace
Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:
- Ini mengimpor Microsoft.VisualStudio.TestTools.UnitTesting namespace layanan, yang berisi jenis yang digunakan untuk pengujian unit. Di C#, namespace diimpor melalui
global using
arahan di GlobalUsings.cs. - Ini menerapkan TestClassAttribute atribut ke
UnitTest1
kelas . - Ini menerapkan TestMethodAttribute atribut untuk menentukan
TestMethod1
dalam C# atauTestSub
di Visual Basic.
Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dijalankan.
- Ini mengimpor Microsoft.VisualStudio.TestTools.UnitTesting namespace layanan, yang berisi jenis yang digunakan untuk pengujian unit. Di C#, namespace diimpor melalui
Menambahkan referensi proyek
Agar proyek pengujian berfungsi dengan StringLibrary
kelas , tambahkan referensi dalam proyek StringLibraryTest ke StringLibrary
proyek.
Di Penjelajah Solusi, klik kanan simpul Dependensi proyek StringLibraryTest dan pilih Tambahkan Referensi Proyek dari menu konteks.
Dalam dialog Manajer Referensi, perluas simpul Proyek, dan pilih kotak di samping StringLibrary. Menambahkan referensi ke
StringLibrary
rakitan memungkinkan pengkompilasi untuk menemukan metode StringLibrary saat mengkompilasi proyek StringLibraryTest .PilihOK.
Menambahkan dan menjalankan metode pengujian unit
Saat Visual Studio menjalankan pengujian unit, Visual Studio menjalankan setiap metode yang ditandai dengan TestMethodAttribute atribut di kelas yang ditandai dengan TestClassAttribute atribut . Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode telah berhasil.
Tes yang paling umum memanggil anggota Assert kelas. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Assert
Beberapa metode kelas yang paling sering disebut ditampilkan 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 false . Pernyataan gagal jika kondisinya adalah true . |
Assert.IsNotNull |
Memverifikasi bahwa objek bukan null . Pernyataan gagal jika objek adalah null . |
Anda juga dapat menggunakan Assert.ThrowsException metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan untuk dilemparkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.
Dalam menguji StringLibrary.StartsWithUpper
metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk kembali true
dalam kasus ini, sehingga Anda dapat memanggil Assert.IsTrue metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk kembali false
dalam kasus ini, sehingga Anda dapat memanggil Assert.IsFalse metode .
Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong (String.Empty
), string valid yang tidak memiliki karakter dan yang Length 0, dan null
string yang belum diinisialisasi. Anda dapat memanggil StartsWithUpper
langsung sebagai metode statis dan meneruskan satu String argumen. Atau Anda dapat memanggil StartsWithUpper
sebagai metode ekstensi pada variabel yang string
ditetapkan ke null
.
Anda akan menentukan tiga metode, yang masing-masing memanggil Assert 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 UnitTest1.cs atau UnitTest1.vb , ganti kode dengan kode berikut:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [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, string.Format("Expected for '{0}': true; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, 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 Namespace
Pengujian karakter huruf besar dalam
TestStartsWithUpper
metode ini mencakup huruf kapital Yunani alfa (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalamTestDoesNotStartWithUpper
metode ini mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).Pada bilah menu, pilih File>Simpan UnitTest1.cs Sebagai atau> File Simpan UnitTest1.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 dapat menyimpannya sebagai file ASCII. Ketika itu terjadi, runtime tidak secara akurat mendekode karakter UTF8 di luar rentang ASCII, dan hasil pengujian tidak akan benar.
Pada bilah menu, pilih Uji>Jalankan Semua Pengujian. Jika jendela Test Explorer tidak terbuka, buka dengan memilih Uji Penjelajah> Uji. Ketiga pengujian tercantum di bagian Tes Lulus, dan bagian Ringkasan melaporkan hasil uji coba.
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.
words
Ubah array dalamTestDoesNotStartWithUpper
metode untuk menyertakan string "Kesalahan". Anda tidak perlu menyimpan file karena Visual Studio secara otomatis menyimpan file terbuka saat solusi dibuat untuk menjalankan pengujian.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
Jalankan pengujian dengan memilih Uji>Jalankan Semua Pengujian dari bilah menu. Jendela Test Explorer menunjukkan bahwa dua pengujian berhasil dan satu gagal.
Pilih pengujian yang gagal,
TestDoesNotStartWith
.Jendela Test Explorer menampilkan pesan yang dihasilkan oleh pernyataan: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.
Hapus string "Kesalahan" yang Anda tambahkan di langkah 1. Jalankan ulang tes dan tes lulus.
Menguji versi Rilis pustaka
Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian waktu tambahan terhadap build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.
Untuk menguji build Rilis:
Di toolbar Visual Studio, ubah konfigurasi build dari Debug ke Rilis.
Di Penjelajah Solusi, klik kanan proyek StringLibrary dan pilih Bangun dari menu konteks untuk mengkompilasi ulang pustaka.
Jalankan pengujian unit dengan memilih Uji>Jalankan Semua Pengujian dari bilah menu. Tes lulus.
Pengujian debug
Jika Anda menggunakan Visual Studio sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan dalam Tutorial: Men-debug aplikasi konsol .NET menggunakan Visual Studio 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 akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.
Sumber Daya Tambahan:
Langkah berikutnya
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:
Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:
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:
Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.
Prasyarat
- Tutorial ini berfungsi dengan solusi yang Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio.
Membuat proyek pengujian unit
Pengujian unit menyediakan pengujian perangkat lunak otomatis selama 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 yang
ClassLibraryProjects
Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio.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 Konfigurasikan proyek baru Anda, masukkan StringLibraryTest di kotak Nama proyek. Kemudian pilih Berikutnya.
Pada halaman Informasi tambahan, pilih .NET 7 (Dukungan istilah standar) di kotak Kerangka Kerja . Kemudian pilih Buat.
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.
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Imports Microsoft.VisualStudio.TestTools.UnitTesting Namespace StringLibraryTest <TestClass> Public Class UnitTest1 <TestMethod> Sub TestSub() End Sub End Class End Namespace
Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:
- Ini mengimpor Microsoft.VisualStudio.TestTools.UnitTesting namespace layanan, yang berisi jenis yang digunakan untuk pengujian unit.
- Ini menerapkan TestClassAttribute atribut ke
UnitTest1
kelas . - Ini menerapkan TestMethodAttribute atribut untuk menentukan
TestMethod1
dalam C# atauTestSub
di Visual Basic.
Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dijalankan.
Menambahkan referensi proyek
Agar proyek pengujian berfungsi dengan StringLibrary
kelas , tambahkan referensi dalam proyek StringLibraryTest ke StringLibrary
proyek.
Di Penjelajah Solusi, klik kanan simpul Dependensi proyek StringLibraryTest dan pilih Tambahkan Referensi Proyek dari menu konteks.
Dalam dialog Manajer Referensi, perluas simpul Proyek, dan pilih kotak di samping StringLibrary. Menambahkan referensi ke
StringLibrary
rakitan memungkinkan pengkompilasi untuk menemukan metode StringLibrary saat mengkompilasi proyek StringLibraryTest .PilihOK.
Menambahkan dan menjalankan metode pengujian unit
Saat Visual Studio menjalankan pengujian unit, Visual Studio menjalankan setiap metode yang ditandai dengan TestMethodAttribute atribut di kelas yang ditandai dengan TestClassAttribute atribut . Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode telah berhasil.
Tes yang paling umum memanggil anggota Assert kelas. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Assert
Beberapa metode kelas yang paling sering disebut ditampilkan 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 false . Pernyataan gagal jika kondisinya adalah true . |
Assert.IsNotNull |
Memverifikasi bahwa objek bukan null . Pernyataan gagal jika objek adalah null . |
Anda juga dapat menggunakan Assert.ThrowsException metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan untuk dilemparkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.
Dalam menguji StringLibrary.StartsWithUpper
metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk kembali true
dalam kasus ini, sehingga Anda dapat memanggil Assert.IsTrue metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk kembali false
dalam kasus ini, sehingga Anda dapat memanggil Assert.IsFalse metode .
Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong (String.Empty
), string valid yang tidak memiliki karakter dan yang Length 0, dan null
string yang belum diinisialisasi. Anda dapat memanggil StartsWithUpper
langsung sebagai metode statis dan meneruskan satu String argumen. Atau Anda dapat memanggil StartsWithUpper
sebagai metode ekstensi pada variabel yang string
ditetapkan ke null
.
Anda akan menentukan tiga metode, yang masing-masing memanggil Assert 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 UnitTest1.cs atau UnitTest1.vb , ganti kode dengan kode berikut:
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [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, string.Format("Expected for '{0}': true; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, 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 Namespace
Pengujian karakter huruf besar dalam
TestStartsWithUpper
metode ini mencakup huruf kapital Yunani alfa (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalamTestDoesNotStartWithUpper
metode ini mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).Pada bilah menu, pilih File>Simpan UnitTest1.cs Sebagai atau> File Simpan UnitTest1.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 dapat menyimpannya sebagai file ASCII. Ketika itu terjadi, runtime tidak secara akurat mendekode karakter UTF8 di luar rentang ASCII, dan hasil pengujian tidak akan benar.
Pada bilah menu, pilih Uji>Jalankan Semua Pengujian. Jika jendela Test Explorer tidak terbuka, buka dengan memilih Uji Penjelajah> Uji. Ketiga pengujian tercantum di bagian Tes Lulus, dan bagian Ringkasan melaporkan hasil uji coba.
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.
words
Ubah array dalamTestDoesNotStartWithUpper
metode untuk menyertakan string "Kesalahan". Anda tidak perlu menyimpan file karena Visual Studio secara otomatis menyimpan file terbuka saat solusi dibuat untuk menjalankan pengujian.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
Jalankan pengujian dengan memilih Uji>Jalankan Semua Pengujian dari bilah menu. Jendela Test Explorer menunjukkan bahwa dua pengujian berhasil dan satu gagal.
Pilih pengujian yang gagal,
TestDoesNotStartWith
.Jendela Test Explorer menampilkan pesan yang dihasilkan oleh pernyataan: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.
Hapus string "Kesalahan" yang Anda tambahkan di langkah 1. Jalankan ulang tes dan tes lulus.
Menguji versi Rilis pustaka
Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian waktu tambahan terhadap build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.
Untuk menguji build Rilis:
Di toolbar Visual Studio, ubah konfigurasi build dari Debug ke Rilis.
Di Penjelajah Solusi, klik kanan proyek StringLibrary dan pilih Bangun dari menu konteks untuk mengkompilasi ulang pustaka.
Jalankan pengujian unit dengan memilih Uji>Jalankan Semua Pengujian dari bilah menu. Tes lulus.
Pengujian debug
Jika Anda menggunakan Visual Studio sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan dalam Tutorial: Men-debug aplikasi konsol .NET menggunakan Visual Studio 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 akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.
Sumber Daya Tambahan:
Langkah berikutnya
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:
Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:
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:
Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.
Prasyarat
- Tutorial ini berfungsi dengan solusi yang Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio.
Membuat proyek pengujian unit
Pengujian unit menyediakan pengujian perangkat lunak otomatis selama 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 yang
ClassLibraryProjects
Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio.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 Konfigurasikan proyek baru Anda, masukkan StringLibraryTest di kotak Nama proyek. Kemudian pilih Berikutnya.
Pada halaman Informasi tambahan, pilih .NET 6 (Dukungan jangka panjang) di kotak Kerangka Kerja . Kemudian pilih Buat.
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.
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Imports Microsoft.VisualStudio.TestTools.UnitTesting Namespace StringLibraryTest <TestClass> Public Class UnitTest1 <TestMethod> Sub TestSub() End Sub End Class End Namespace
Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:
- Ini mengimpor Microsoft.VisualStudio.TestTools.UnitTesting namespace layanan, yang berisi jenis yang digunakan untuk pengujian unit.
- Ini menerapkan TestClassAttribute atribut ke
UnitTest1
kelas . - Ini menerapkan TestMethodAttribute atribut untuk menentukan
TestMethod1
dalam C# atauTestSub
di Visual Basic.
Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dijalankan.
Menambahkan referensi proyek
Agar proyek pengujian berfungsi dengan StringLibrary
kelas , tambahkan referensi dalam proyek StringLibraryTest ke StringLibrary
proyek.
Di Penjelajah Solusi, klik kanan simpul Dependensi proyek StringLibraryTest dan pilih Tambahkan Referensi Proyek dari menu konteks.
Dalam dialog Manajer Referensi, perluas simpul Proyek, dan pilih kotak di samping StringLibrary. Menambahkan referensi ke
StringLibrary
rakitan memungkinkan pengkompilasi untuk menemukan metode StringLibrary saat mengkompilasi proyek StringLibraryTest .PilihOK.
Menambahkan dan menjalankan metode pengujian unit
Saat Visual Studio menjalankan pengujian unit, Visual Studio menjalankan setiap metode yang ditandai dengan TestMethodAttribute atribut di kelas yang ditandai dengan TestClassAttribute atribut . Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode telah berhasil.
Tes yang paling umum memanggil anggota Assert kelas. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Assert
Beberapa metode kelas yang paling sering disebut ditampilkan 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 false . Pernyataan gagal jika kondisinya adalah true . |
Assert.IsNotNull |
Memverifikasi bahwa objek bukan null . Pernyataan gagal jika objek adalah null . |
Anda juga dapat menggunakan Assert.ThrowsException metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan untuk dilemparkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.
Dalam menguji StringLibrary.StartsWithUpper
metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk kembali true
dalam kasus ini, sehingga Anda dapat memanggil Assert.IsTrue metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk kembali false
dalam kasus ini, sehingga Anda dapat memanggil Assert.IsFalse metode .
Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong (String.Empty
), string valid yang tidak memiliki karakter dan yang Length 0, dan null
string yang belum diinisialisasi. Anda dapat memanggil StartsWithUpper
langsung sebagai metode statis dan meneruskan satu String argumen. Atau Anda dapat memanggil StartsWithUpper
sebagai metode ekstensi pada variabel yang string
ditetapkan ke null
.
Anda akan menentukan tiga metode, yang masing-masing memanggil Assert 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 UnitTest1.cs atau UnitTest1.vb , ganti kode dengan kode berikut:
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [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, string.Format("Expected for '{0}': true; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, 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 Namespace
Pengujian karakter huruf besar dalam
TestStartsWithUpper
metode ini mencakup huruf kapital Yunani alfa (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalamTestDoesNotStartWithUpper
metode ini mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).Pada bilah menu, pilih File>Simpan UnitTest1.cs Sebagai atau> File Simpan UnitTest1.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 dapat menyimpannya sebagai file ASCII. Ketika itu terjadi, runtime tidak secara akurat mendekode karakter UTF8 di luar rentang ASCII, dan hasil pengujian tidak akan benar.
Pada bilah menu, pilih Uji>Jalankan Semua Pengujian. Jika jendela Test Explorer tidak terbuka, buka dengan memilih Uji Penjelajah> Uji. Ketiga pengujian tercantum di bagian Tes Lulus, dan bagian Ringkasan melaporkan hasil uji coba.
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.
words
Ubah array dalamTestDoesNotStartWithUpper
metode untuk menyertakan string "Kesalahan". Anda tidak perlu menyimpan file karena Visual Studio secara otomatis menyimpan file terbuka saat solusi dibuat untuk menjalankan pengujian.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
Jalankan pengujian dengan memilih Uji>Jalankan Semua Pengujian dari bilah menu. Jendela Test Explorer menunjukkan bahwa dua pengujian berhasil dan satu gagal.
Pilih pengujian yang gagal,
TestDoesNotStartWith
.Jendela Test Explorer menampilkan pesan yang dihasilkan oleh pernyataan: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.
Hapus string "Kesalahan" yang Anda tambahkan di langkah 1. Jalankan ulang tes dan tes lulus.
Menguji versi Rilis pustaka
Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian waktu tambahan terhadap build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.
Untuk menguji build Rilis:
Di toolbar Visual Studio, ubah konfigurasi build dari Debug ke Rilis.
Di Penjelajah Solusi, klik kanan proyek StringLibrary dan pilih Bangun dari menu konteks untuk mengkompilasi ulang pustaka.
Jalankan pengujian unit dengan memilih Uji>Jalankan Semua Pengujian dari bilah menu. Tes lulus.
Pengujian debug
Jika Anda menggunakan Visual Studio sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan dalam Tutorial: Men-debug aplikasi konsol .NET menggunakan Visual Studio 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 akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.
Sumber Daya Tambahan:
Langkah berikutnya
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:
Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:
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: