Bagikan melalui


Pengujian unit pustaka Visual Basic .NET Core menggunakan dotnet test dan MSTest

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 yang sudah dibangun, lihat atau unduh kode sampel sebelum memulai. 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.

Membuat proyek sumber

Buka jendela shell. Buat direktori yang disebut unit-testing-vb-mstest untuk menahan solusi. Di dalam direktori baru ini, jalankan dotnet new sln untuk membuat solusi baru. Praktik ini memudahkan pengelolaan pustaka kelas dan proyek pengujian unit. Di dalam direktori solusi, buat direktori PrimeService. Anda memiliki direktori dan struktur file berikut sejauh ini:

/unit-testing-vb-mstest
    unit-testing-vb-mstest.sln
    /PrimeService

Buat PrimeService direktori saat ini dan jalankan dotnet new classlib -lang VB untuk membuat proyek sumber. Ganti nama Class1.VB menjadi PrimeService.VB. Anda membuat implementasi yang gagal dari kelas PrimeService:

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

Kembalilah ke direktori unit-testing-vb-using-mstest. Jalankan dotnet sln add .\PrimeService\PrimeService.vbproj untuk menambahkan proyek pustaka kelas ke solusi.

Membuat proyek pengujian

Selanjutnya, buat direktori PrimeService.Tests. Kerangka berikut menunjukkan struktur direktori:

/unit-testing-vb-mstest
    unit-testing-vb-mstest.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests

Buat direktori PrimeService.Tests direktori saat ini dan buat proyek baru menggunakan dotnet new mstest -lang VB. Perintah ini membuat proyek pengujian yang menggunakan MSTest sebagai pustaka pengujian. Templat yang dihasilkan mengonfigurasi penggerak pengujian di PrimeServiceTests.vbproj:

<ItemGroup>
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
  <PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
  <PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>

Proyek pengujian memerlukan paket lain untuk membuat dan menjalankan pengujian unit. dotnet new pada langkah sebelumnya menambahkan MSTest. Sekarang, tambahkan pustaka kelas PrimeService sebagai dependensi lain ke proyek. Gunakan perintah dotnet reference add:

dotnet reference add ../PrimeService/PrimeService.vbproj

Anda dapat melihat seluruh file di repositori sampel di GitHub.

Anda memiliki tata letak solusi akhir berikut:

/unit-testing-vb-mstest
    unit-testing-vb-mstest.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests
        Test Source Files
        PrimeServiceTests.vbproj

Jalankan dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj di direktori unit-testing-vb-mstest.

Membuat pengujian pertama

Anda menulis satu pengujian yang gagal, membuatnya lulus, lalu mengulangi prosesnya. Hapus UnitTest1.vb dari direktori PrimeService.Tests dan buat file Visual Basic baru bernama PrimeService_IsPrimeShould.VB. Tambahkan kode berikut:

Imports Microsoft.VisualStudio.TestTools.UnitTesting

Namespace PrimeService.Tests
    <TestClass>
    Public Class PrimeService_IsPrimeShould
        Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()

        <TestMethod>
        Sub IsPrime_InputIs1_ReturnFalse()
            Dim result As Boolean = _primeService.IsPrime(1)

            Assert.IsFalse(result, "1 should not be prime")
        End Sub

    End Class
End Namespace

Atribut <TestClass> menunjukkan kelas yang berisi pengujian. Atribut <TestMethod> menunjukkan metode yang dijalankan oleh runner pengujian. Dari unit-testing-vb-mstest, jalankan dotnet test untuk membuat pengujian dan pustaka kelas, kemudian menjalankan pengujian. Pengelola uji MSTest 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 kelas PrimeService 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-mstest , jalankan dotnet test lagi. Perintah dotnet test menjalankan build untuk proyek PrimeService lalu untuk proyek PrimeService.Tests. Setelah membangun kedua proyek, ia menjalankan pengujian tunggal ini. Ini berlalu.

Menambahkan lebih banyak fitur

Sekarang setelah Anda menyelesaikan satu kali uji coba, saatnya menulis lebih banyak. Ada beberapa kasus sederhana lainnya untuk bilangan prima: 0, -1. Anda dapat menambahkan kasus-kasus tersebut sebagai pengujian baru dengan atribut <TestMethod>, tetapi itu dengan cepat menjadi melelahkan. Ada atribut MSTest lainnya yang memungkinkan Anda menulis serangkaian pengujian serupa. Anda dapat menggunakan atribut <DataRow> bersama dengan atribut <TestMethod> untuk menentukan nilai untuk input tersebut.

Alih-alih membuat pengujian baru, terapkan kedua atribut ini untuk membuat satu teori. Teori adalah metode yang menguji beberapa nilai kurang dari dua, yang merupakan angka utama terendah:

<TestClass>
Public Class PrimeService_IsPrimeShould
    Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()

    <TestMethod>
    <DataRow(-1)>
    <DataRow(0)>
    <DataRow(1)>
    Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
        Dim result As Boolean = _primeService.IsPrime(value)

        Assert.IsFalse(result, $"{value} should not be prime")
    End Sub

    <TestMethod>
    <DataRow(2)>
    <DataRow(3)>
    <DataRow(5)>
    <DataRow(7)>
    Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
        Dim result As Boolean = _primeService.IsPrime(value)

        Assert.IsTrue(result, $"{value} should be prime")
    End Sub

    <TestMethod>
    <DataRow(4)>
    <DataRow(6)>
    <DataRow(8)>
    <DataRow(9)>
    Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
        Dim result As Boolean = _primeService.IsPrime(value)

        Assert.IsFalse(result, $"{value} should not be prime")
    End Sub
End Class

Jalankan dotnet test, dan dua pengujian ini gagal. Untuk membuat semua tes lulus, ubah klausul if di awal metode:

if candidate < 2

Lanjutkan iterasi dengan menambahkan lebih banyak tes, lebih banyak teori, dan lebih banyak kode di pustaka utama. Anda memiliki versi selesai dari pengujian dan implementasi lengkap dari pustaka .

Anda telah membangun perpustakaan kecil dan serangkaian unit pengujian untuk perpustakaan 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.