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 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.
Prasyarat
Membuat proyek sumber
Buka jendela shell. Buat direktori dengan nama unit-testing-using-mstest untuk menyimpan solusi. Di dalam direktori baru ini, jalankan dotnet new sln untuk membuat file solusi baru untuk pustaka kelas dan proyek pengujian. Buat direktori PrimeService. Kerangka berikut menunjukkan direktori dan struktur file sejauh ini:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Buat PrimeService direktori saat ini dan jalankan dotnet new classlib untuk membuat proyek sumber. Ganti nama Class1.cs menjadi PrimeService.cs. Ganti kode dalam file dengan kode berikut untuk membuat implementasi kelas PrimeService yang 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-mstest. Jalankan dotnet sln add untuk menambahkan proyek pustaka kelas ke solusi:
dotnet sln add PrimeService/PrimeService.csproj
Membuat proyek pengujian
Buat direktori PrimeService.Tests. Kerangka berikut menunjukkan struktur direktori:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Buat direktori PrimeService.Tests direktori saat ini dan buat proyek baru menggunakan dotnet new mstest. Perintah baru dotnet membuat proyek pengujian yang menggunakan MSTest sebagai pustaka pengujian. Templat mengonfigurasi runner pengujian di file PrimeServiceTests.csproj:
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</ItemGroup>
Proyek pengujian memerlukan paket lain untuk membuat dan menjalankan pengujian unit.
dotnet new pada langkah sebelumnya menambahkan paket dan alat MSTest yang diperlukan untuk pelaporan cakupan kode.
Tambahkan pustaka kelas PrimeService sebagai dependensi lain ke proyek. Gunakan perintah dotnet reference add:
dotnet reference add ../PrimeService/PrimeService.csproj
Anda dapat melihat seluruh file di repositori sampel di GitHub.
Kerangka berikut menunjukkan tata letak solusi akhir:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
Ubah ke direktori unit-testing-using-mstest, dan jalankan dotnet sln add:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Membuat pengujian pertama
Tulis pengujian yang gagal, jadikan lulus, lalu ulangi prosesnya. Hapus UnitTest1.cs dari direktori PrimeService.Tests dan buat file C# baru bernama PrimeService_IsPrimeShould.cs dengan konten berikut:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestClass]
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService;
public PrimeService_IsPrimeShould()
{
_primeService = new PrimeService();
}
[TestMethod]
public void IsPrime_InputIs1_ReturnFalse()
{
bool result = _primeService.IsPrime(1);
Assert.IsFalse(result, "1 shouldn't be prime");
}
}
}
Atribut TestClass menunjukkan kelas yang berisi pengujian unit. Atribut TestMethod menunjukkan metode adalah metode pengujian.
Simpan file ini dan jalankan dotnet test untuk membangun pengujian dan pustaka kelas lalu jalankan pengujian. Pengelola uji MSTest berisi titik masuk program untuk menjalankan pengujian Anda.
dotnet test memulai runner pengujian menggunakan proyek pengujian unit yang Anda buat.
Pengujian Anda gagal karena Anda belum membuat implementasi. Buat lulus pengujian ini dengan menulis kode paling sederhana di kelas PrimeService 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-mstest, jalankan dotnet test lagi. Perintah dotnet test menjalankan build untuk proyek PrimeService lalu untuk proyek PrimeService.Tests. Setelah membangun kedua proyek, sistem menjalankan pengujian tunggal ini. Ini berlalu.
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 atribut TestMethod , tetapi itu dengan cepat menjadi melelahkan. Ada atribut MSTest lainnya yang memungkinkan Anda menulis serangkaian pengujian serupa. Metode pengujian dapat menjalankan kode yang sama tetapi memiliki argumen input yang berbeda. Anda dapat menggunakan atribut DataRow untuk menentukan nilai untuk input tersebut.
Alih-alih membuat pengujian baru, terapkan kedua 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. Tambahkan metode pengujian baru di PrimeService_IsPrimeShould.cs:
[TestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{value} should not be prime");
}
Jalankan dotnet test, dan dua pengujian ini gagal. Untuk membuat semua tes lulus, ubah klausul if di awal metode IsPrime dalam file PrimeService.cs:
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 membangun pustaka kecil dan serangkaian pengujian unit untuk pustaka tersebut. Anda menyusun solusi sehingga menambahkan paket dan pengujian baru adalah bagian dari alur kerja normal. Anda memkonsentrasi sebagian besar waktu dan upaya Anda untuk menyelesaikan tujuan aplikasi.