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
- .NET 8 SDK veya sonraki sürümleri.
- Tercih ettiğiniz bir metin veya kod düzenleyicisi.
Kaynak projeyi oluşturma
Bir kabuk penceresi açın. Çözümü tutmak için unit-testing-vb-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 dosya yapısını gösterir:
/unit-testing-vb-nunit
unit-testing-vb-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 -lang VB
Class1.VBPrimeService.VBolarak yeniden adlandırın.
PrimeService sınıfının başarısız bir uygulamasını oluşturursunuz:
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
Dizini yeniden unit-testing-vb-using-mstest 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.vbproj
Test projesi oluşturma
Ardından PrimeService.Tests dizinini oluşturun. Aşağıdaki ana hat dizin yapısını gösterir:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
PrimeService.Tests dizinini geçerli dizin yapın ve aşağıdaki komutu kullanarak yeni bir proje oluşturun:
dotnet new nunit -lang VB
dotnet new komutu, test kitaplığı olarak NUnit kullanan bir test projesi oluşturur. Oluşturulan şablon , PrimeServiceTests.vbproj dosyasında test çalıştırıcısını yapılandırıyor:
<ItemGroup>
<PackageReference Include="nunit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
</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.vbproj 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.
dotnet new önceki adımda NUnit ve NUnit test bağdaştırıcısı eklendi. Ş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.vbproj
Dosyanın tamamını GitHub'daki örnekleri deposunda görebilirsiniz.
Aşağıdaki son çözüm düzenine sahipsiniz:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Unit-testing-vb-nunit dizininde aşağıdaki komutu yürütür:
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
İ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.vb dosyasını PrimeService_IsPrimeShould.VB olarak yeniden adlandırın ve içeriğinin tamamını aşağıdaki kodla değiştirin:
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
<TestFixture> özniteliği, testleri içeren bir sınıfı gösterir.
<Test> özniteliği, test çalıştırıcısı tarafından çalıştırılan bir yöntemi belirtir.
unit-testing-vb-nunit öğesinden testleri ve sınıf kitaplığını oluşturmak ve ardından testleri çalıştırmak için dotnet test komutunu 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 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. Çalışan PrimeService sınıfında en basit kodu yazarak bu testi geçirin:
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
Unit-testing-vb-nunit dizininde yeniden çalıştırındotnet test.
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. Bu durumları <Test> özniteliğiyle yeni testler olarak ekleyebilirsiniz, ancak bu durum kısa sürede yorucu hale gelir. Benzer testlerden oluşan bir paket yazmanızı sağlayan başka xUnit öznitelikleri de vardır.
<TestCase> Öznitelik, aynı kodu yürüten ancak farklı giriş bağımsız değişkenleri olan bir test paketini temsil eder.
<TestCase> özniteliğini kullanarak bu girişlerin değerlerini belirtebilirsiniz.
Yeni testler oluşturmak yerine, en düşük asal sayı olan ikiden küçük birkaç değeri test eden bir dizi test oluşturmak için bu iki özniteliği uygulayın:
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
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ında, Main yönteminin başındaki koşulu değiştirin.
if candidate < 2
Ana kitaplığa daha fazla test, daha fazla teori ve daha fazla kod ekleyerek yinelemeye devam edin. testlerin
Küçük bir kitaplık ve bu kitaplık için bir dizi birim testi oluşturdunuz. Çözümü, yeni paket ve test ekleme işleminin normal iş akışının bir parçası olacak şekilde yapılandırdıysanız. Zamanınızın ve çabanızın çoğunu uygulamanın hedeflerini çözmeye yoğunlaştırmışsınız.