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 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.
Membuat solusi
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-testPerintah
dotnet new slnmembuat 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 VBdotnet new classlibPerintah 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 NamespaceKode sebelumnya:
- Melemparkan NotImplementedException dengan pesan yang menunjukkan bahwa ini belum diimplementasikan.
- Akan diperbarui di bagian selanjutnya dari tutorial.
Di direktori unit-testing-using-dotnet-test , jalankan perintah berikut untuk menambahkan proyek pustaka kelas ke solusi:
dotnet sln add ./PrimeService/PrimeService.vbprojBuat proyek PrimeService.Tests dengan menjalankan perintah berikut:
dotnet new xunit -o PrimeService.Tests -lang VBPerintah 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.vbprojPrimeServiceTambahkan 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 -lang VB
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 ke IsPrime gagal. Pada TDD, sebuah tes ditulis yang sudah pasti akan gagal. Kode target diperbarui agar pengujian berhasil. Anda terus mengulangi pendekatan ini, menulis tes yang gagal dan kemudian memperbarui kode target untuk berhasil.
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. Penggerak pengujian 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 berhasil.
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 saat hanya parameter yang berubah dapat menyebabkan duplikasi kode dan membengkaknya ukuran pengujian. 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 dari pengujian tersebut 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.