Unit menguji pustaka Visual Basic .NET Core menggunakan pengujian dotnet dan NUnit
Tutorial ini membawa Anda melalui pengalaman interaktif membangun solusi sampel langkah demi langkah untuk mempelajari konsep pengujian unit. Jika Anda lebih suka mengikuti tutorial menggunakan solusi bawaan, lihat atau unduh kode sampel sebelum Anda mulai. Untuk petunjuk pengunduhan, lihat Sampel dan Tutorial.
Artikel ini berisi tentang menguji proyek .NET Core. Jika Anda menguji proyek ASP.NET Core, lihat Pengujian integrasi di ASP.NET Core.
Prasyarat
- .NET 8 SDK atau versi yang lebih baru.
- Editor teks atau editor kode pilihan Anda.
Membuat proyek sumber
Buka jendela shell. Buat direktori yang disebut unit-testing-vb-nunit untuk menahan solusi. Di dalam direktori baru ini, jalankan perintah berikut untuk membuat file solusi baru untuk pustaka kelas dan proyek pengujian:
dotnet new sln
Selanjutnya, buat direktori PrimeService . Kerangka berikut menunjukkan struktur file sejauh ini:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Jadikan PrimeService sebagai direktori saat ini dan jalankan perintah berikut untuk membuat proyek sumber:
dotnet new classlib -lang VB
Ganti nama Class1.VB menjadi PrimeService.VB. Anda membuat implementasi kelas yang PrimeService
gagal:
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first.")
End Function
End Class
End Namespace
Ubah direktori kembali ke direktori unit-testing-vb-using-mstest . Jalankan perintah berikut untuk menambahkan proyek pustaka kelas ke solusi:
dotnet sln add .\PrimeService\PrimeService.vbproj
Membuat proyek pengujian
Selanjutnya, buat direktori PrimeService.Tests . Kerangka berikut menunjukkan struktur direktori:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Jadikan direktori PrimeService.Tests sebagai direktori saat ini dan buat proyek baru menggunakan perintah berikut:
dotnet new nunit -lang VB
Perintah baru dotnet membuat proyek pengujian yang menggunakan NUnit sebagai pustaka pengujian. Templat yang dihasilkan mengonfigurasi runner pengujian dalam file PrimeServiceTests.vbproj :
<ItemGroup>
<PackageReference Include="nunit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
</ItemGroup>
Catatan
Sebelum .NET 9, kode yang dihasilkan dapat mereferensikan versi kerangka kerja pengujian NUnit yang lebih lama. Anda dapat menggunakan dotnet CLI untuk memperbarui paket. Atau, buka file PrimeService.Tests.vbproj dan ganti konten grup item referensi paket dengan kode di atas.
Proyek pengujian memerlukan paket lain untuk membuat dan menjalankan pengujian unit. dotnet new
pada langkah sebelumnya menambahkan NUnit dan adaptor pengujian NUnit. Sekarang, tambahkan PrimeService
pustaka kelas sebagai dependensi lain ke proyek. Gunakan perintah dotnet add reference
:
dotnet add reference ../PrimeService/PrimeService.vbproj
Anda dapat melihat seluruh file di repositori sampel di GitHub.
Anda memiliki tata letak solusi akhir berikut:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Jalankan perintah berikut di direktori unit-testing-vb-nunit :
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
Membuat pengujian pertama
Anda menulis satu pengujian yang gagal, membuatnya lulus, lalu mengulangi prosesnya. Di direktori PrimeService.Tests, ganti nama file UnitTest1.vb menjadi PrimeService_IsPrimeShould.VB dan ganti seluruh kontennya dengan kode berikut:
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
Atribut <TestFixture>
menunjukkan kelas yang berisi pengujian. Atribut <Test>
menunjukkan metode yang dijalankan oleh runner pengujian. Dari unit-testing-vb-nunit, jalankan dotnet test
untuk membangun pengujian dan pustaka kelas lalu jalankan pengujian. Runner pengujian NUnit berisi titik masuk program untuk menjalankan pengujian Anda. dotnet test
memulai runner pengujian menggunakan proyek pengujian unit yang telah Anda buat.
Tes anda gagal. Anda belum membuat implementasi. Buat lulus pengujian ini dengan menulis kode paling sederhana di PrimeService
kelas yang berfungsi:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
Di direktori unit-testing-vb-nunit, jalankan dotnet test
lagi. Perintah dotnet test
menjalankan build untuk PrimeService
proyek lalu untuk PrimeService.Tests
proyek. Setelah membangun kedua proyek, ia menjalankan pengujian tunggal ini. Itu lewat.
Menambahkan lebih banyak fitur
Sekarang setelah Anda membuat satu lulus ujian, saatnya untuk menulis lebih banyak. Ada beberapa kasus sederhana lainnya untuk bilangan prima: 0, -1. Anda dapat menambahkan kasus-kasus tersebut <Test>
sebagai pengujian baru dengan atribut , tetapi itu dengan cepat menjadi melelahkan. Ada atribut xUnit lainnya yang memungkinkan Anda menulis serangkaian pengujian serupa. Atribut <TestCase>
mewakili serangkaian pengujian yang menjalankan kode yang sama tetapi memiliki argumen input yang berbeda. Anda dapat menggunakan <TestCase>
atribut untuk menentukan nilai untuk input tersebut.
Alih-alih membuat pengujian baru, terapkan kedua atribut ini untuk membuat serangkaian pengujian yang menguji beberapa nilai kurang dari dua, yang merupakan angka utama terendah:
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
Jalankan dotnet test
, dan dua pengujian ini gagal. Untuk membuat semua tes lulus, ubah if
klausul di awal Main
metode dalam file PrimeServices.cs :
if candidate < 2
Lanjutkan iterasi dengan menambahkan lebih banyak tes, lebih banyak teori, dan lebih banyak kode di pustaka utama. Anda memiliki versi pengujian yang sudah selesai dan implementasi lengkap pustaka.
Anda telah membangun pustaka kecil dan serangkaian pengujian unit untuk pustaka tersebut. Anda telah menyusun solusi sehingga menambahkan paket dan pengujian baru adalah bagian dari alur kerja normal. Anda telah memkonsentasikan sebagian besar waktu dan upaya Anda untuk menyelesaikan tujuan aplikasi.
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