Bagikan melalui


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