Unit menguji pustaka Visual Basic .NET Core menggunakan pengujian dotnet dan xUnit
Tutorial ini menunjukkan cara membangun solusi yang berisi proyek pengujian unit dan proyek pustaka. Untuk mengikuti tutorial menggunakan solusi bawaan, lihat atau unduh kode sampel. Untuk petunjuk pengunduhan, lihat Sampel dan Tutorial.
Buat solusinya
Di bagian ini, solusi dibuat yang berisi proyek sumber dan pengujian. Solusi yang telah selesai memiliki struktur direktori berikut:
/unit-testing-using-dotnet-test
unit-testing-using-dotnet-test.sln
/PrimeService
PrimeService.vb
PrimeService.vbproj
/PrimeService.Tests
PrimeService_IsPrimeShould.vb
PrimeServiceTests.vbproj
Instruksi berikut menyediakan langkah-langkah untuk membuat solusi pengujian. Lihat Perintah untuk membuat solusi pengujian untuk instruksi membuat solusi pengujian dalam satu langkah.
Buka jendela shell.
Jalankan perintah berikut:
dotnet new sln -o unit-testing-using-dotnet-test
Perintah
dotnet new sln
membuat solusi baru di direktori unit-testing-using-dotnet-test .Ubah direktori ke folder unit-testing-using-dotnet-test .
Jalankan perintah berikut:
dotnet new classlib -o PrimeService --lang VB
dotnet new classlib
Perintah membuat proyek pustaka kelas baru di folder PrimeService. Pustaka kelas baru akan berisi kode yang akan diuji.Ganti nama Class1.vb menjadi PrimeService.vb.
Ganti kode di PrimeService.vb dengan kode berikut:
Imports System Namespace Prime.Services Public Class PrimeService Public Function IsPrime(candidate As Integer) As Boolean Throw New NotImplementedException("Not implemented.") End Function End Class End Namespace
Kode sebelumnya:
- Melempar dengan NotImplementedException pesan yang menunjukkan bahwa pesan tidak diimplementasikan.
- Diperbarui nanti dalam tutorial.
Di direktori unit-testing-using-dotnet-test, jalankan perintah berikut untuk menambahkan proyek pustaka kelas ke solusi:
dotnet sln add ./PrimeService/PrimeService.vbproj
Buat proyek PrimeService.Tests dengan menjalankan perintah berikut:
dotnet new xunit -o PrimeService.Tests
Perintah sebelumnya:
- Membuat proyek PrimeService.Tests di direktori PrimeService.Tests. Proyek pengujian menggunakan xUnit sebagai pustaka pengujian.
- Mengonfigurasi runner pengujian dengan menambahkan elemen berikut
<PackageReference />
ke file proyek:- "Microsoft.NET.Test.Sdk"
- "xunit"
- "xunit.runner.visualstudio"
Tambahkan proyek pengujian ke file solusi dengan menjalankan perintah berikut:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
PrimeService
Tambahkan pustaka kelas sebagai dependensi ke proyek PrimeService.Tests:dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
Perintah untuk membuat solusi
Bagian ini meringkas semua perintah di bagian sebelumnya. Lewati bagian ini jika Anda telah menyelesaikan langkah-langkah di bagian sebelumnya.
Perintah berikut membuat solusi pengujian pada komputer Windows. Untuk macOS dan Unix, perbarui ren
perintah ke versi ren
OS untuk mengganti nama file:
dotnet new sln -o unit-testing-using-dotnet-test
cd unit-testing-using-dotnet-test
dotnet new classlib -o PrimeService
ren .\PrimeService\Class1.vb PrimeService.vb
dotnet sln add ./PrimeService/PrimeService.vbproj
dotnet new xunit -o PrimeService.Tests
dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Ikuti instruksi untuk "Ganti kode di PrimeService.vb dengan kode berikut" di bagian sebelumnya.
Membuat pengujian
Pendekatan populer dalam pengembangan berbasis pengujian (TDD) adalah menulis pengujian sebelum menerapkan kode target. Tutorial ini menggunakan pendekatan TDD. Metode IsPrime
ini dapat dipanggil, tetapi tidak diimplementasikan. Panggilan uji gagal IsPrime
. Dengan TDD, tes ditulis yang diketahui gagal. Kode target diperbarui untuk membuat lulus pengujian. Anda terus mengulangi pendekatan ini, menulis pengujian yang gagal dan kemudian memperbarui kode target untuk lulus.
Perbarui proyek PrimeService.Tests:
- Hapus PrimeService.Tests/UnitTest1.vb.
- Buat file PrimeService.Tests/PrimeService_IsPrimeShould.vb .
- Ganti kode di PrimeService_IsPrimeShould.vb dengan kode berikut:
Imports Xunit
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService
Public Sub New()
_primeService = New Prime.Services.PrimeService()
End Sub
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
End Class
End Namespace
Atribut [Fact]
mendeklarasikan metode pengujian yang dijalankan oleh runner pengujian. Dari folder PrimeService.Tests , jalankan dotnet test
. Perintah uji dotnet membangun proyek dan menjalankan pengujian. Runner uji xUnit berisi titik masuk program untuk menjalankan pengujian. dotnet test
memulai runner pengujian menggunakan proyek pengujian unit.
Pengujian gagal karena IsPrime
belum diimplementasikan. Dengan menggunakan pendekatan TDD, tulis kode yang cukup sehingga pengujian ini lolos. Perbarui IsPrime
dengan kode berikut:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Not implemented.")
End Function
Jalankan dotnet test
. Tes lolos.
Menambahkan lebih banyak pengujian
Tambahkan tes nomor primer untuk 0 dan -1. Anda dapat menyalin pengujian sebelumnya dan mengubah kode berikut untuk menggunakan 0 dan -1:
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
Menyalin kode pengujian ketika hanya perubahan parameter yang menghasilkan duplikasi kode dan uji kembung. Atribut xUnit berikut memungkinkan penulisan serangkaian pengujian serupa:
[Theory]
mewakili serangkaian pengujian yang menjalankan kode yang sama tetapi memiliki argumen input yang berbeda.[InlineData]
atribut menentukan nilai untuk input tersebut.
Daripada membuat pengujian baru, terapkan atribut xUnit sebelumnya untuk membuat satu teori. Ganti kode berikut:
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
dengan kode berikut:
<Theory>
<InlineData(-1)>
<InlineData(0)>
<InlineData(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(ByVal value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.False(result, $"{value} should not be prime")
End Sub
Dalam kode sebelumnya, [Theory]
dan [InlineData]
aktifkan pengujian beberapa nilai kurang dari dua. Dua adalah angka utama terkecil.
Jalankan dotnet test
, dua pengujian gagal. Untuk membuat semua tes lulus, perbarui IsPrime
metode dengan kode berikut:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate < 2 Then
Return False
End If
Throw New NotImplementedException("Not fully implemented.")
End Function
Setelah pendekatan TDD, tambahkan lebih banyak pengujian yang gagal, lalu perbarui kode target. Lihat versi pengujian yang sudah selesai dan implementasi lengkap pustaka.
Metode yang diselesaikan IsPrime
bukanlah algoritma yang efisien untuk menguji primalitas.
Sumber daya tambahan
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