Bagikan melalui


Pengujian unit C# dengan NUnit dan .NET Core

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.0 atau versi yang lebih baru.
  • Editor teks atau editor kode pilihan Anda.

Membuat proyek sumber

Buka jendela shell. Buat direktori yang disebut unit-testing-using-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 direktori dan struktur file sejauh ini:

/unit-testing-using-nunit
    unit-testing-using-nunit.sln
    /PrimeService

Jadikan PrimeService sebagai direktori saat ini dan jalankan perintah berikut untuk membuat proyek sumber:

dotnet new classlib

Ganti nama Class1.cs menjadi PrimeService.cs. Anda membuat implementasi kelas yang PrimeService gagal:

using System;

namespace Prime.Services
{
    public class PrimeService
    {
        public bool IsPrime(int candidate)
        {
            throw new NotImplementedException("Please create a test first.");
        }
    }
}

Ubah direktori kembali ke direktori unit-testing-using-nunit . Jalankan perintah berikut untuk menambahkan proyek pustaka kelas ke solusi:

dotnet sln add PrimeService/PrimeService.csproj

Membuat proyek pengujian

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

/unit-testing-using-nunit
    unit-testing-using-nunit.sln
    /PrimeService
        Source Files
        PrimeService.csproj
    /PrimeService.Tests

Jadikan direktori PrimeService.Tests sebagai direktori saat ini dan buat proyek baru menggunakan perintah berikut:

dotnet new nunit

Perintah baru dotnet membuat proyek pengujian yang menggunakan NUnit sebagai pustaka pengujian. Templat yang dihasilkan mengonfigurasi runner pengujian di file PrimeService.Tests.csproj :

<ItemGroup>
  <PackageReference Include="nunit" Version="4.2.2" />
  <PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
  <PackageReference Include="NUnit.Analyzers" Version="4.3.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
  </PackageReference>
</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.csproj dan ganti konten grup item referensi paket dengan kode di atas.

Proyek pengujian memerlukan paket lain untuk membuat dan menjalankan pengujian unit. dotnet new Perintah pada langkah sebelumnya menambahkan Microsoft test SDK, kerangka kerja pengujian 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.csproj

Anda dapat melihat seluruh file di repositori sampel di GitHub.

Kerangka berikut menunjukkan tata letak solusi akhir:

/unit-testing-using-nunit
    unit-testing-using-nunit.sln
    /PrimeService
        Source Files
        PrimeService.csproj
    /PrimeService.Tests
        Test Source Files
        PrimeService.Tests.csproj

Jalankan perintah berikut di direktori unit-testing-using-nunit :

dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj

Membuat pengujian pertama

Anda menulis satu pengujian yang gagal, membuatnya lulus, lalu mengulangi prosesnya. Di direktori PrimeService.Tests, ganti nama file UnitTest1.cs menjadi PrimeService_IsPrimeShould.cs dan ganti seluruh kontennya dengan kode berikut:

using NUnit.Framework;
using Prime.Services;

namespace Prime.UnitTests.Services
{
    [TestFixture]
    public class PrimeService_IsPrimeShould
    {
        private PrimeService _primeService;

        [SetUp]
        public void SetUp()
        {
            _primeService = new PrimeService();
        }

        [Test]
        public void IsPrime_InputIs1_ReturnFalse()
        {
            var result = _primeService.IsPrime(1);

            Assert.That(result, Is.False, "1 should not be prime");
        }
    }
}

Atribut [TestFixture] menunjukkan kelas yang berisi pengujian unit. Atribut [Test] menunjukkan metode adalah metode pengujian.

Simpan file ini dan jalankan dotnet test perintah untuk membangun pengujian dan pustaka kelas dan menjalankan 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 uji lulus dengan menulis kode paling sederhana di PrimeService kelas yang berfungsi:

public bool IsPrime(int candidate)
{
    if (candidate == 1)
    {
        return false;
    }
    throw new NotImplementedException("Please create a test first.");
}

Di direktori unit-testing-using-nunit, jalankan dotnet test lagi. Perintah dotnet test menjalankan build untuk PrimeService proyek lalu untuk PrimeService.Tests proyek. Setelah Anda membangun kedua proyek, ia menjalankan satu pengujian 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 pengujian baru dengan [Test] atribut , tetapi itu dengan cepat menjadi melelahkan. Ada atribut NUnit lain yang memungkinkan Anda menulis serangkaian pengujian serupa. Atribut [TestCase] digunakan untuk membuat 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 atribut ini untuk membuat satu pengujian berbasis data. Pengujian berbasis data adalah metode yang menguji beberapa nilai kurang dari dua, yang merupakan angka utama terendah:

[TestCase(-1)]
[TestCase(0)]
[TestCase(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
    var result = _primeService?.IsPrime(value);

    Assert.That(result, Is.False, $"{value} should not be prime");
}

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

if (candidate < 2)

Lanjutkan iterasi dengan menambahkan lebih banyak pengujian, teori, dan 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 juga telah menyusun solusi sehingga menambahkan paket dan pengujian baru adalah bagian dari alur kerja standar. Anda telah memkonsentasikan sebagian besar waktu dan upaya Anda untuk menyelesaikan tujuan aplikasi.