Mulai menggunakan Pengujian Unit Langsung
Saat Anda mengaktifkan Pengujian Unit Langsung dalam solusi Visual Studio, cakupan pengujian dan status pengujian Anda akan digambarkan secara visual. Pengujian Unit Langsung juga secara dinamis menjalankan pengujian setiap kali Anda memodifikasi kode dan segera memberi tahu Anda ketika perubahan Anda menyebabkan pengujian gagal.
Pengujian Unit Langsung dapat digunakan untuk menguji solusi yang menargetkan .NET Framework, .NET Core, atau .NET 5+. Dalam tutorial ini, Anda akan belajar menggunakan Pengujian Unit Langsung dengan membuat pustaka kelas sederhana yang menargetkan .NET, dan Anda akan membuat proyek MSTest yang menargetkan .NET untuk mengujinya.
Solusi C# lengkap dapat diunduh dari repositori MicrosoftDocs/visualstudio-docs di GitHub.
Prasyarat
Tutorial ini mengharuskan Anda menginstal edisi Visual Studio Enterprise dengan beban kerja pengembangan desktop .NET.
Membuat solusi dan proyek pustaka kelas .NET Framework
Mulailah dengan membuat solusi Visual Studio bernama UtilityLibraries yang terdiri dari satu proyek pustaka kelas .NET, StringLibrary.
Solusinya adalah satu kontainer untuk satu atau beberapa proyek. Untuk membuat solusi kosong, buka Visual Studio dan lakukan hal berikut:
Pilih File>Baru>Proyek dari menu Visual Studio tingkat atas.
Ketik solusi ke dalam kotak pencarian templat, lalu pilih templat Solusi Kosong. Beri nama proyek UtilityLibraries.
Selesaikan pembuatan solusi.
Setelah membuat solusi, Anda akan membuat pustaka kelas .NET Framework bernama StringLibrary yang berisi sejumlah metode ekstensi untuk bekerja dengan string.
Di Penjelajah Solusi, klik kanan pada solusi UtilityLibraries dan pilih Tambahkan>Proyek Baru.
Ketik pustaka kelas ke dalam kotak pencarian templat, dan pilih templat Pustaka Kelas yang menargetkan .NET atau .NET Standard. Klik Berikutnya.
Beri nama proyek StringLibrary.
Klik Buat untuk membuat proyek.
Ganti semua kode yang ada di editor kode dengan kode berikut:
using System; namespace UtilityLibraries { public static class StringLibrary { public static bool StartsWithUpper(this string s) { if (String.IsNullOrWhiteSpace(s)) return false; return Char.IsUpper(s[0]); } public static bool StartsWithLower(this string s) { if (String.IsNullOrWhiteSpace(s)) return false; return Char.IsLower(s[0]); } public static bool HasEmbeddedSpaces(this string s) { foreach (var ch in s.Trim()) { if (ch == ' ') return true; } return false; } } }
StringLibrary memiliki tiga metode statik:
StartsWithUpper
mengembalikantrue
jika string dimulai dengan karakter huruf besar; jika tidak,false
akan dikembalikan.StartsWithLower
mengembalikantrue
jika string dimulai dengan karakter huruf kecil; jika tidak,false
akan dikembalikan.HasEmbeddedSpaces
mengembalkantrue
jika string berisi karakter spasi kosong yang disematkan; jika tidak,false
akan dikembalikan.
Pilih Build>Solusi Build dari menu Visual Studio tingkat atas. Build itu seharusnya berhasil dimulai.
Membuat proyek pengujian
Langkah selanjutnya adalah membuat proyek pengujian unit untuk menguji pustaka StringLibrary. Buat pengujian unit dengan melakukan langkah-langkah berikut:
Di Penjelajah Solusi, klik kanan pada solusi UtilityLibraries dan pilih Tambahkan>Proyek Baru.
Ketik pengujian unit ke dalam kotak pencarian templat, pilih C# sebagai bahasa, lalu pilih MSTest Unit Test Project untuk templat .NET. Klik Berikutnya.
Catatan
Di Visual Studio 2019 versi 16.9, nama templat proyek MSTest adalah Unit Test Project.
Beri nama proyek StringLibraryTests dan klik Berikutnya.
Pilih kerangka kerja target yang direkomendasikan atau .NET 8, lalu pilih Buat.
Catatan
Tutorial memulai ini menggunakan Pengujian Unit Langsung dengan kerangka kerja pengujian MSTest. Anda juga dapat menggunakan kerangka kerja pengujian xUnit dan NUnit.
Proyek pengujian unit tidak dapat mengakses pustaka kelas yang sedang diuji secara otomatis. Anda memberikan akses pustaka pengujian dengan menambahkan referensi ke proyek pustaka kelas .NET Framework. Untuk melakukan ini, klik
StringLibraryTests
kanan proyek dan pilih Tambahkan>Referensi Proyek. Dalam dialog Manajer Referensi, pastikan tab Solusi dipilih, dan pilih proyek StringLibrary, seperti yang diperlihatkan dalam ilustrasi berikut.Ganti kode pengujian unit boilerplate yang disediakan oleh templat dengan kode berikut:
using System; 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, $"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 ? "<null>" : word)}': " + $"false; Actual: {result}"); } } } }
Simpan proyek Anda dengan memilih ikon Simpan pada toolbar.
Karena kode pengujian unit menyertakan beberapa karakter non-ASCII, Anda akan melihat dialog berikut untuk memperingatkan bahwa beberapa karakter akan hilang jika Anda menyimpan file dalam format ASCII defaultnya.
Pilih tombol Simpan dengan Pengodean Lainnya.
Dalam daftar drop-down Pengodean dialog Opsi Simpan Lanjutan, pilih Unicode (UTF-8 tanpa tanda tangan) - Codepage 65001, seperti yang ditunjukkan oleh ilustrasi berikut:
Kompilasi proyek pengujian unit dengan memilih Build>Solusi Build Ulang dari menu Visual Studio tingkat atas.
Anda telah membuat pustaka kelas .NET Framework serta beberapa pengujian unit untuknya. Anda sekarang telah menyelesaikan persiapan yang diperlukan untuk menggunakan Pengujian Unit Langsung.
Mengaktifkan Pengujian Unit Langsung
Sejauh ini, meskipun Anda telah menulis pengujian untuk pustaka kelas .NET Framework StringLibrary, Anda belum menjalankannya. Pengujian Unit Langsung menjalankannya secara otomatis setelah Anda mengaktifkannya. Untuk melakukannya, lakukan berikut ini:
Secara opsional, pilih jendela editor kode yang berisi kode untuk StringLibrary. Ini adalah Class1.cs untuk proyek C# atau Class1.vb untuk proyek Visual Basic. (Langkah ini memungkinkan Anda memeriksa hasil pengujian secara visual dan sejauh mana cakupan kode setelah Anda mengaktifkan Pengujian Unit Langsung.)
Pilih Pengujian>Pengujian Unit Langsung>Mulai dari menu Visual Studio tingkat atas.
Verifikasi konfigurasi untuk Pengujian Unit Langsung dengan memastikan Repositori Root menyertakan jalur ke file sumber untuk proyek utilitas dan proyek pengujian. Pilih Berikutnya lalu Selesai.
Di jendela Pengujian Unit Langsung, pilih tautan sertakan semua pengujian (Atau, pilih ikon tombol Daftar Putar, lalu pilih StringLibraryTest, yang memilih semua pengujian di bawahnya. Kemudian batal pilih tombol Daftar Putar untuk keluar dari mode edit.)
Visual Studio akan membangun kembali proyek dan memulai Pengujian Unit Langsung, yang secara otomatis menjalankan semua pengujian Anda.
- Visual Studio akan membangun kembali proyek dan memulai Pengujian Unit Langsung, yang secara otomatis menjalankan semua pengujian Anda.
Setelah selesai menjalankan pengujian, Pengujian Unit Langsung menampilkan hasil keseluruhan dan hasil pengujian individu. Selain itu, jendela editor kode menampilkan cakupan kode pengujian dan hasil pengujian secara grafis. Seperti yang ditunjukkan oleh ilustrasi berikut, ketiga pengujian telah berhasil dijalankan. Ini juga menunjukkan bahwa pengujian kami telah mencakup semua jalur kode dalam metode StartsWithUpper
, dan pengujian tersebut semuanya berhasil dijalankan (yang ditunjukkan oleh tanda centang hijau, "✓"). Akhirnya, ini menunjukkan bahwa tidak ada metode lain dalam StringLibrary yang memiliki cakupan kode (yang ditunjukkan oleh garis biru, "➖").
Anda juga bisa mendapatkan informasi lebih detail tentang cakupan pengujian dan hasil pengujian dengan memilih ikon cakupan kode tertentu di jendela editor kode. Untuk memeriksa detail ini, lakukan hal berikut:
Klik tanda centang hijau pada baris yang bertuliskan
if (String.IsNullOrWhiteSpace(s))
dalam metodeStartsWithUpper
. Seperti yang ditunjukkan oleh ilustrasi berikut, Pengujian Unit Langsung menunjukkan bahwa tiga pengujian mencakup baris kode tersebut, dan semuanya telah berhasil dijalankan.Klik tanda centang hijau pada baris yang bertuliskan
return Char.IsUpper(s[0])
dalam metodeStartsWithUpper
. Seperti yang ditunjukkan oleh ilustrasi berikut, Pengujian Unit Langsung menunjukkan bahwa hanya dua pengujian yang mencakup baris kode tersebut, dan semuanya telah berhasil dijalankan.
Masalah utama yang diidentifikasi Pengujian Unit Langsung adalah cakupan kode yang tidak lengkap. Anda akan membahasnya di bagian berikutnya.
Memperluas cakupan pengujian
Di bagian ini, Anda akan mengembangkan pengujian unit ke metode StartsWithLower
. Saat Anda melakukannya, Pengujian Unit Langsung akan terus menguji kode secara dinamis.
Untuk memperluas cakupan kode ke metode StartsWithLower
, lakukan hal berikut:
Tambahkan metode
TestStartsWithLower
danTestDoesNotStartWithLower
berikut ke file kode sumber pengujian proyek Anda:// Code to add to UnitTest1.cs [TestMethod] public void TestStartsWithLower() { // Tests that we expect to return true. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство" }; foreach (var word in words) { bool result = word.StartsWithLower(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithLower() { // Tests that we expect to return false. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва", "1234", ".", ";", " "}; foreach (var word in words) { bool result = word.StartsWithLower(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } }
Ubah metode
DirectCallWithNullOrEmpty
dengan menambahkan kode berikut segera setelah panggilan ke metodeMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse
.// Code to add to UnitTest1.cs result = StringLibrary.StartsWithLower(word); Assert.IsFalse(result, $"Expected for '{(word == null ? "<null>" : word)}': " + $"false; Actual: {result}");
Pengujian Unit Langsung otomatis menjalankan pengujian baru dan yang diubah jika Anda mengubah kode sumber. Seperti yang ditunjukkan oleh ilustrasi berikut, semua pengujian, termasuk dua yang telah ditambahkan dan yang telah diubah, telah berhasil.
Beralih ke jendela yang berisi kode sumber untuk kelas StringLibrary. Pengujian Unit Langsung sekarang menunjukkan bahwa cakupan kode kami diperluas ke metode
StartsWithLower
.
Dalam beberapa kasus, pengujian yang berhasil di Test Explorer mungkin berwarna abu-abu. Itu menunjukkan bahwa pengujian saat ini sedang dijalankan, atau bahwa pengujian belum berjalan lagi karena tidak ada perubahan kode yang akan memengaruhi pengujian sejak terakhir kali dijalankan.
Sejauh ini, semua pengujian kami telah berhasil. Di bagian berikutnya, kita akan memeriksa bagaimana Anda dapat menangani kegagalan pengujian.
Menangani kegagalan pengujian
Di bagian ini, Anda akan mempelajari cara menggunakan Pengujian Unit Langsung untuk mengidentifikasi, memecahkan masalah, dan mengatasi kegagalan pengujian. Anda akan melakukannya dengan memperluas cakupan pengujian ke metode HasEmbeddedSpaces
.
Tambahkan metode berikut ke file pengujian Anda:
[TestMethod] public void TestHasEmbeddedSpaces() { // Tests that we expect to return true. string[] phrases = { "one car", "Name\u0009Description", "Line1\nLine2", "Line3\u000ALine4", "Line5\u000BLine6", "Line7\u000CLine8", "Line0009\u000DLine10", "word1\u00A0word2" }; foreach (var phrase in phrases) { bool result = phrase.HasEmbeddedSpaces(); Assert.IsTrue(result, $"Expected for '{phrase}': true; Actual: {result}"); } }
Ketika pengujian dijalankan, Pengujian Unit Langsung menunjukkan bahwa metode
TestHasEmbeddedSpaces
telah gagal, seperti yang ditunjukkan oleh ilustrasi berikut:Pilih jendela yang menampilkan kode pustaka. Pengujian Unit Langsung telah memperluas cakupan kode ke metode
HasEmbeddedSpaces
. Ini juga melaporkan kegagalan pengujian dengan menambahkan "🞩" merah ke baris yang dicakup oleh pengujian yang gagal.Arahkan kursor ke atas baris dengan tanda tangan metode
HasEmbeddedSpaces
. Pengujian Unit Langsung menampilkan tooltip yang melaporkan bahwa metode dicakup oleh satu pengujian, seperti yang ditunjukkan oleh ilustrasi berikut:Pilih pengujian TestHasEmbeddedSpaces yang gagal. Pengujian Unit Langsung memberi Anda beberapa opsi seperti menjalankan semua pengujian dan menelusuri kesalahan semua pengujian, seperti yang ditunjukkan oleh ilustrasi berikut:
Pilih Debug Semua untuk men-debug pengujian yang gagal.
Visual Studio menjalankan pengujian dalam mode debug.
Pengujian menetapkan setiap string dalam array ke variabel bernama
phrase
dan meneruskannya ke metodeHasEmbeddedSpaces
. Eksekusi program dijeda dan memanggil debugger saat pertama kali ekspresi pernyataannya adalahfalse
. Dialog pengecualian yang dihasilkan dari nilai tak terduga dalam panggilan metodeMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue
diperlihatkan dalam ilustrasi berikut.Selain itu, semua alat penelusuran kesalahan yang disediakan Visual Studio tersedia untuk membantu kami memecahkan masalah pengujian yang gagal, seperti yang ditunjukkan oleh ilustrasi berikut:
Perhatikan di jendela Autos bahwa nilai variabel
phrase
adalah "Name\tDescription", yang merupakan elemen kedua dari array. Metode pengujian mengharapkanHasEmbeddedSpaces
untuk mengembalikantrue
ketika melewati string ini; bukan, mengembalikanfalse
. Terbukti, "\t", karakter tab, tidak dikenali sebagai spasi yang disematkan.Pilih Debug>Lanjutkan, tekan F5, atau klik tombol Lanjutkan pada toolbar untuk melanjutkan eksekusi program pengujian. Karena terjadi pengecualian yang tidak tertangani, pengujian berakhir. Ini memberikan informasi yang cukup untuk penyelidikan awal bug. Baik
TestHasEmbeddedSpaces
(pengujian rutin) membuat asumsi yang salah, atauHasEmbeddedSpaces
tidak mengenali semua spasi yang disematkan dengan benar.Untuk mendiagnosis dan memperbaiki masalah, mulailah dengan metode
StringLibrary.HasEmbeddedSpaces
. Lihat perbandingannya dalam metodeHasEmbeddedSpaces
. Ruang yang disematkan dianggap U+0020. Namun, Unicode Standar menyertakan sejumlah karakter spasi lainnya. Ini menunjukkan bahwa kode pustaka telah salah diuji untuk karakter spasi kosong.Ganti perbandingan kesetaraan dengan panggilan ke metode System.Char.IsWhiteSpace:
if (Char.IsWhiteSpace(ch))
Pengujian Unit Langsung otomatis menjalankan ulang metode pengujian yang gagal.
Pengujian Unit Langsung menunjukkan hasil yang diperbarui muncul, yang juga muncul di jendela editor kode.
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk