Dotnet test ve MSTest kullanarak Visual Basic .NET Core kitaplıklarını birim testi
Bu öğreticide, birim testi kavramlarını öğrenmek için adım adım örnek bir çözüm oluşturma etkileşimli bir deneyime geçilir. Ö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 projelerini test etme hakkındadır. ASP.NET Core projesini test ediyorsanız bkz . ASP.NET Core'da tümleştirme testleri.
Kaynak projeyi oluşturma
Bir kabuk penceresi açın. Çözümü tutmak için unit-testing-vb-mstest adlı bir dizin oluşturun.
Bu yeni dizinin içinde komutunu çalıştırarak dotnet new sln
yeni bir çözüm oluşturun. Bu uygulama hem sınıf kitaplığını hem de birim testi projesini yönetmeyi kolaylaştırır.
Çözüm dizininde bir PrimeService dizini oluşturun. Şu ana kadar aşağıdaki dizin ve dosya yapısına sahipsiniz:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
PrimeService'i geçerli dizin yapın ve kaynak projeyi oluşturmak için komutunu çalıştırındotnet new classlib -lang VB
. Class1.VB PrimeService.VB olarak yeniden adlandırın. Sınıfın PrimeService
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. Sınıf kitaplığı projesini çözüme eklemek için komutunu ç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-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
PrimeService.Tests dizinini geçerli dizin yapın ve kullanarak dotnet new mstest -lang VB
yeni bir proje oluşturun. Bu komut, test kitaplığı olarak MSTest 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="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>
Test projesi, birim testleri oluşturmak ve çalıştırmak için başka paketler gerektirir. dotnet new
önceki adımda MSTest ve MSTest çalıştırıcısı eklendi. Şimdi, sınıf kitaplığını PrimeService
projeye başka bir bağımlılık olarak ekleyin. dotnet add reference
Komutunu kullanın:
dotnet add reference ../PrimeService/PrimeService.vbproj
Dosyanın tamamını GitHub'daki örnek deposunda görebilirsiniz.
Aşağıdaki son çözüm düzenine sahipsiniz:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.vbproj
unit-testing-vb-mstest dizininde yürütürdotnet 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 dizininden UnitTest1.vb kaldırın ve PrimeService_IsPrimeShould.VB adlı yeni bir Visual Basic dosyası oluşturun. Şu kodu ekleyin:
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Namespace PrimeService.Tests
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.IsFalse(result, "1 should not be prime")
End Sub
End Class
End Namespace
<TestClass>
özniteliği, testleri içeren bir sınıfı gösterir. özniteliği, <TestMethod>
test çalıştırıcısı tarafından çalıştırılan bir yöntemi belirtir. Unit-testing-vb-mstest'ten testleri ve sınıf kitaplığını derlemek için komutunu yürütür dotnet test
ve ardından testleri çalıştırır. MSTest 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. Sınıfında çalışan en basit kodu PrimeService
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-mstest dizininde yeniden çalıştırındotnet test
. komutu, dotnet test
proje için PrimeService
ve ardından proje için PrimeService.Tests
bir derleme çalıştırır. Her iki projeyi de derledikten sonra bu tek testi çalıştırır. Geçti.
Daha fazla özellik ekleme
Artık bir test geçişi yaptığınıza göre, daha fazla yazmanın zamanı geldi. Asal sayılar için birkaç basit durum daha vardır: 0, -1. Bu durumları özniteliğiyle <TestMethod>
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 MSTest öznitelikleri de vardır. <DataTestMethod>
Öznitelik, aynı kodu yürüten ancak farklı giriş bağımsız değişkenleri olan bir test paketini temsil eder. Bu girişler için değerleri belirtmek için özniteliğini kullanabilirsiniz <DataRow>
.
Yeni testler oluşturmak yerine bu iki özniteliği uygulayarak tek bir teori oluşturun. Teori, en düşük asal sayı olan ikiden küçük birkaç değeri test eden bir yöntemdir:
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<DataTestMethod>
<DataRow(-1)>
<DataRow(0)>
<DataRow(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
<DataTestMethod>
<DataRow(2)>
<DataRow(3)>
<DataRow(5)>
<DataRow(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsTrue(result, $"{value} should be prime")
End Sub
<DataTestMethod>
<DataRow(4)>
<DataRow(6)>
<DataRow(8)>
<DataRow(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
End Class
komutunu çalıştırın dotnet test
ve bu testlerden ikisi başarısız olur. Tüm testlerin geçmesini sağlamak için yönteminin if
başındaki yan tümcesini değiştirin:
if candidate < 2
Ana kitaplığa daha fazla test, daha fazla teori ve daha fazla kod ekleyerek yinelemeye devam edin. Testlerin tamamlanmış sürümüne ve kitaplığın tam uygulamasına sahipsiniz.
Bu kitaplık için küçük bir kitaplık ve 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin