Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğretici, birim testi kavramlarını öğrenmek için adım adım örnek bir çözüm oluştururken sizi etkileşimli bir deneyime götürür. Öğreticiyi önceden oluşturulmuş bir çözüm kullanarak izlemeyi tercih ediyorsanız, başlamadan önce örnek kodu görüntüleyin veya indirin. İndirme yönergeleri için bkz. Örnekler ve Öğreticiler.
Bu makale bir .NET Core projelerini test etme hakkındadır. bir ASP.NET Core projesini test ediyorsanız bkz. ASP.NET Core
Önkoşullar
- En yeni .NET SDK
- Visual Studio Code düzenleyici
- C# Geliştirme Kiti
Kaynak projeyi oluşturma
Bir kabuk penceresi açın. Çözümü tutmak için unit-testing-using-nunit adlı bir dizin oluşturun. Bu yeni dizinin içinde aşağıdaki komutu çalıştırarak sınıf kitaplığı ve test projesi için yeni bir çözüm dosyası oluşturun:
dotnet new sln
Ardından bir PrimeService dizini oluşturun. Şu ana hat, şu ana kadarki dizin ve dosya yapısını gösterir:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
PrimeService'i geçerli dizin yapın ve kaynak projeyi oluşturmak için aşağıdaki komutu çalıştırın:
dotnet new classlib
Class1.csPrimeService.csolarak yeniden adlandırın.
PrimeService
sınıfının başarısız bir uygulamasını oluşturursunuz:
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Dizini yeniden unit-testing-using-nunit dizinine değiştirin. Çözüme sınıf kitaplığı projesini eklemek için aşağıdaki komutu çalıştırın:
dotnet sln add PrimeService/PrimeService.csproj
Test projesi oluşturma
Ardından PrimeService.Tests dizinini oluşturun. Aşağıdaki ana hat dizin yapısını gösterir:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
PrimeService.Tests dizinini geçerli dizin yapın ve aşağıdaki komutu kullanarak yeni bir proje oluşturun:
dotnet new nunit
dotnet new komutu, test kitaplığı olarak NUnit kullanan bir test projesi oluşturur. Oluşturulan şablon, PrimeService.Tests.csproj dosyasında test çalıştırıcısını yapılandırıyor:
<ItemGroup>
<PackageReference Include="nunit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="NUnit.Analyzers" Version="4.9.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
Uyarı
.NET 9'dan önce, oluşturulan kod NUnit test çerçevesinin eski sürümlerine başvurabilir. Paketleri güncelleştirmek için dotnet CLI kullanabilirsiniz. Alternatif olarak, PrimeService.Tests.csproj dosyasını açın ve paket başvuruları öğe grubunun içeriğini yukarıdaki kodla değiştirin.
Test projesi, birim testleri oluşturmak ve çalıştırmak için başka paketler gerektirir. Önceki adımdaki dotnet new
komutu Microsoft test SDK'sını, NUnit test çerçevesini ve NUnit test bağdaştırıcısını ekledi. Şimdi PrimeService
sınıf kitaplığını projeye başka bir bağımlılık olarak ekleyin.
dotnet reference add
komutunu kullanın:
dotnet reference add ../PrimeService/PrimeService.csproj
Dosyanın tamamını GitHub'daki örnekleri deposunda görebilirsiniz.
Aşağıdaki ana hat, son çözüm düzenini gösterir:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
unit-testing-using-nunit dizininde aşağıdaki komutu yürütür:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
İlk testi oluşturma
Başarısız bir test yazar, başarılı olur ve işlemi tekrarlarsınız. PrimeService.Tests dizininde UnitTest1.cs dosyasını PrimeService_IsPrimeShould.cs olarak yeniden adlandırın ve içeriğinin tamamını aşağıdaki kodla değiştirin:
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");
}
}
}
[TestFixture]
özniteliği, birim testleri içeren bir sınıfı belirtir.
[Test]
özniteliği bir yöntemin bir test yöntemi olduğunu gösterir.
Testleri ve sınıf kitaplığını oluşturmak ve testleri çalıştırmak için bu dosyayı kaydedin ve dotnet test
komutunu yürütür. NUnit test çalıştırıcısı, testlerinizi çalıştırmak için program giriş noktasını içerir.
dotnet test
oluşturduğunuz birim testi projesini kullanarak test çalıştırıcısını başlatır.
Testiniz başarısız oluyor. Uygulamayı henüz oluşturmadınız.
PrimeService
sınıfında çalışan en basit kodu yazarak test geçişini yapın:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
unit-testing-using-nunit dizininde dotnet test
'yi yeniden çalıştırın.
dotnet test
komutu, PrimeService
projesi ve ardından PrimeService.Tests
projesi için bir derleme çalıştırır. Her iki projeyi de derledikten sonra bu tek testi çalıştırır. Geçiyor.
Daha fazla özellik ekleme
İlk testi başarıyla geçtiğinize göre, şimdi daha fazla test yazmanın zamanı geldi. Asal sayılar için birkaç basit durum daha vardır: 0, -1.
[Test]
özniteliğiyle yeni testler ekleyebilirsiniz, ancak bu hızla yorucu hale gelir. Benzer testlerden oluşan bir paket yazmanızı sağlayan başka NUnit öznitelikleri de vardır.
[TestCase]
özniteliği, aynı kodu yürüten ancak farklı giriş bağımsız değişkenleri olan bir test paketi oluşturmak için kullanılır.
[TestCase]
özniteliğini kullanarak bu girişlerin değerlerini belirtebilirsiniz.
Yeni testler oluşturmak yerine bu özniteliği uygulayarak tek bir veri temelli test oluşturun. Veri temelli test, en düşük asal sayı olan ikiden küçük birkaç değeri test eden bir yöntemdir:
[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");
}
dotnet test
çalıştırın ve bu testlerden ikisi başarısız olur. Tüm testlerin geçmesini sağlamak için, if
dosyasındaki Main
yönteminin başındaki yan tümcesini değiştirin:
if (candidate < 2)
Ana kitaplığa daha fazla test, teori ve kod ekleyerek yinelemeye devam edin. testlerin
Küçük bir kitaplık ve bu kitaplık için bir dizi birim testi oluşturdunuz. Ayrıca çözümü, yeni paket ve test eklemenin standart iş akışının bir parçası olacak şekilde yapılandırmış olmanız gerekir. Zamanınızın ve çabanızın çoğunu uygulamanın hedeflerini çözmeye yoğunlaştırmışsınız.