NUnit ve .NET Core Ile birim testi C#
Bu öğreticide, birim testi kavramlarını öğrenmek için bir örnek çözüm oluşturma adım adım yönergeler sunarak etkileşimli bir deneyim sağlanır. Önceden oluşturulmuş bir çözüm kullanarak öğreticiyi 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 projesini test etmekle ilgilidir. Bir ASP.NET Core projesini test ediyorsanız, ASP.NET Core'daki Tümleştirme testlerinebakın.
Önkoşullar
- .NET Core 2,1 SDK veya sonraki sürümleri.
- Tercih ettiğiniz bir metin veya kod düzenleyicisi.
Kaynak proje oluşturma
Bir kabuk penceresi açın. Çözümü tutmak için birim-test-using-NUnit adlı bir dizin oluşturun. Bu yeni dizin içinde, sınıf kitaplığı ve test projesi için yeni bir çözüm dosyası oluşturmak üzere aşağıdaki komutu çalıştırın:
dotnet new sln
Ardından, bir Primeservice dizini oluşturun. Aşağıdaki ana hat şu ana kadar dizin ve dosya yapısını gösterir:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Kaynak projeyi oluşturmak için Primeservice 'i geçerli dizin yapın ve şu komutu çalıştırın:
dotnet new classlib
Class1. cs ' i primeservice. cs olarak yeniden adlandırın. Sınıfın başarısız bir uygulamasını oluşturursunuz PrimeService :
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Dizini birim-test-NUnit dizinine geri doğru 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. test dizinini geçerli dizini 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ındaki Test Çalıştırıcısı 'nı yapılandırır:
<ItemGroup>
<PackageReference Include="nunit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
</ItemGroup>
Test projesi, birim testlerini oluşturmak ve çalıştırmak için diğer paketlerin kullanılmasını gerektirir. dotnet new önceki adımda Microsoft Test SDK 'sını, NUnit test çerçevesini ve NUnit test bağdaştırıcısını ekledik. Şimdi, PrimeService sınıf kitaplığını projeye başka bir bağımlılık olarak ekleyin. Şu dotnet add reference komutu kullanın:
dotnet add reference ../PrimeService/PrimeService.csproj
GitHub üzerindeki örnek deposunda dosyanın tamamını görebilirsiniz.
Aşağıdaki ana hat, son çözüm yerleşimini göstermektedir:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
Birim-test-NUnit dizininde aşağıdaki komutu yürütün:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
İlk test oluşturma
Başarısız bir test yazdığınızda, geçişi yapıp işlemi tekrarlayabilirsiniz. Primeservice. Tests dizininde, UnitTest1. cs dosyasını PrimeService_IsPrimeShould. cs olarak yeniden adlandırın ve tüm içeriğini 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.IsFalse(result, "1 should not be prime");
}
}
}
[TestFixture]Öznitelik, birim testlerini içeren bir sınıfı gösterir. [Test]Özniteliği bir yöntemin test yöntemi olduğunu gösterir.
dotnet testTestleri ve sınıf kitaplığını derlemek ve ardından testleri çalıştırmak için bu dosyayı kaydedin ve yürütün. 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 test projesini kullanarak Test Çalıştırıcısı başlatır.
Testiniz başarısız oluyor. Uygulamayı henüz oluşturmadınız. Bu test geçişini, çalıştıran sınıfa en basit kodu yazarak yapın PrimeService :
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
Birim-test-using-NUnit dizininde dotnet test yeniden çalıştırın. dotnet testKomutu, proje için bir yapı PrimeService ve ardından proje için çalışır PrimeService.Tests . Her iki proje de oluşturulduktan sonra bu tek testi çalıştırır. Geçirir.
Daha fazla özellik ekleme
Artık bir test geçişi yapmış olduğunuza göre daha fazla yazma zamanı vardır. Asal sayıların diğer birkaç basit durumu vardır: 0,-1. Özniteliğiyle yeni testler ekleyebilirsiniz [Test] , ancak bu hızlı bir şekilde sıkıcı olur. Benzer testlerin bir paketini yazmanızı sağlayan başka NUnit öznitelikleri vardır. [TestCase]Özniteliği, aynı kodu çalıştıran ancak farklı giriş bağımsız değişkenlerine sahip olan testlerin bir paketini oluşturmak için kullanılır. [TestCase]Bu girişlerin değerlerini belirtmek için özniteliğini kullanabilirsiniz.
Yeni test oluşturmak yerine, tek bir veri temelli test oluşturmak için bu özniteliği uygulayın. Veri temelli test, en düşük asal sayı olan iki değerden küçük birkaç değeri sınayan bir yöntemdir:
[TestCase(-1)]
[TestCase(0)]
[TestCase(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{value} should not be prime");
}
Çalıştır dotnet test ve bu testlerin ikisi de başarısız olur. Tüm testlerin geçişini yapmak için, if Main primeservice. cs dosyasındaki yönteminin başındaki yan tümceyi değiştirin:
if (candidate < 2)
Ana kitaplıkta daha fazla test, daha fazla yer ve daha fazla kod ekleyerek yinelemek için devam edin. Testlerin tamamlanmış sürümüne ve kitaplığın tüm uygulamasınasahipsiniz.
Bu kitaplık için küçük bir kitaplık ve birim testleri kümesi oluşturdunuz. Çözümü, yeni paket ve test eklemek normal iş akışının bir parçası olacak şekilde öğrendiniz. Uygulamanın hedeflerini çözme konusunda zaman ve çaba harcamanızı en iyi şekilde gördünüz.