Dotnet test ve xUnit kullanarak Visual Basic .NET Core kitaplıklarını birim testi
Bu öğreticide birim testi projesi ve kitaplık projesi içeren bir çözümün nasıl derlenmesi gösterilmektedir. Önceden oluşturulmuş bir çözümü kullanarak öğreticiyi izlemek için örnek kodu görüntüleyin veya indirin. İndirme yönergeleri için bkz . Örnekler ve Öğreticiler.
Çözümü oluşturma
Bu bölümde, kaynak ve test projelerini içeren bir çözüm oluşturulur. Tamamlanan çözüm aşağıdaki dizin yapısına sahiptir:
/unit-testing-using-dotnet-test
unit-testing-using-dotnet-test.sln
/PrimeService
PrimeService.vb
PrimeService.vbproj
/PrimeService.Tests
PrimeService_IsPrimeShould.vb
PrimeServiceTests.vbproj
Aşağıdaki yönergeler test çözümünü oluşturma adımlarını sağlar. Bir adımda test çözümü oluşturma yönergeleri için bkz. Test çözümü oluşturma komutları.
Bir kabuk penceresi açın.
Şu komutu çalıştırın:
dotnet new sln -o unit-testing-using-dotnet-test
komutu unit-testing-using-dotnet-test
dotnet new sln
dizininde yeni bir çözüm oluşturur.Dizini unit-testing-using-dotnet-test klasörüne değiştirin.
Şu komutu çalıştırın:
dotnet new classlib -o PrimeService --lang VB
komutu,
dotnet new classlib
PrimeService klasöründe yeni bir sınıf kitaplığı projesi oluşturur. Yeni sınıf kitaplığı test edilecek kodu içerir.Class1.vb PrimeService.vb olarak yeniden adlandırın.
PrimeService.vb içindeki kodu aşağıdaki kodla değiştirin:
Imports System Namespace Prime.Services Public Class PrimeService Public Function IsPrime(candidate As Integer) As Boolean Throw New NotImplementedException("Not implemented.") End Function End Class End Namespace
Yukarıdaki kod:
- NotImplementedException Uygulanmadığını belirten bir iletiyle bir oluşturur.
- Öğreticinin devamında güncelleştirilir.
Unit-testing-using-dotnet-test dizininde, çözüme sınıf kitaplığı projesini eklemek için aşağıdaki komutu çalıştırın:
dotnet sln add ./PrimeService/PrimeService.vbproj
Aşağıdaki komutu çalıştırarak PrimeService.Tests projesini oluşturun:
dotnet new xunit -o PrimeService.Tests
Yukarıdaki komut:
- PrimeService.Tests dizininde PrimeService.Tests projesini oluşturur. Test projesi, test kitaplığı olarak xUnit kullanır.
- Proje dosyasına aşağıdaki
<PackageReference />
öğeleri ekleyerek test çalıştırıcısını yapılandırılır:- "Microsoft.NET.Test.Sdk"
- "xunit"
- "xunit.runner.visualstudio"
Aşağıdaki komutu çalıştırarak test projesini çözüm dosyasına ekleyin:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Sınıf kitaplığını
PrimeService
PrimeService.Tests projesine bağımlılık olarak ekleyin:dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
Çözümü oluşturmak için komutlar
Bu bölüm, önceki bölümdeki tüm komutları özetler. Önceki bölümdeki adımları tamamladıysanız bu bölümü atlayın.
Aşağıdaki komutlar bir Windows makinesinde test çözümünü oluşturur. macOS ve Unix için dosyasını yeniden adlandırmak için komutunu işletim sistemi sürümüne ren
güncelleştirinren
:
dotnet new sln -o unit-testing-using-dotnet-test
cd unit-testing-using-dotnet-test
dotnet new classlib -o PrimeService
ren .\PrimeService\Class1.vb PrimeService.vb
dotnet sln add ./PrimeService/PrimeService.vbproj
dotnet new xunit -o PrimeService.Tests
dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Önceki bölümde yer alan "PrimeService.vb içindeki kodu aşağıdaki kodla değiştirin" yönergelerini izleyin.
Test oluşturun
Test temelli geliştirmede (TDD) popüler bir yaklaşım, hedef kodu uygulamadan önce bir test yazmaktır. Bu öğreticide TDD yaklaşımı kullanılır. IsPrime
yöntemi çağrılabilir, ancak uygulanmaz. Bir test çağrısı IsPrime
başarısız oluyor. TDD ile başarısız olduğu bilinen bir test yazılır. Hedef kod test geçişi yapacak şekilde güncelleştirilir. Bu yaklaşımı yinelemeye, başarısız bir test yazmaya ve ardından hedef kodu geçirecek şekilde güncelleştirmeye devam edersiniz.
PrimeService.Tests projesini güncelleştirin:
- PrimeService.Tests/UnitTest1.vb silin.
- PrimeService.Tests /PrimeService_IsPrimeShould.vb dosyası oluşturun.
- PrimeService_IsPrimeShould.vb içindeki kodu aşağıdaki kodla değiştirin:
Imports Xunit
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService
Public Sub New()
_primeService = New Prime.Services.PrimeService()
End Sub
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
End Class
End Namespace
özniteliği, [Fact]
test çalıştırıcısı tarafından çalıştırılan bir test yöntemini bildirir. PrimeService.Tests klasöründen komutunu çalıştırındotnet test
. dotnet test komutu hem projeleri oluşturur hem de testleri çalıştırır. xUnit test çalıştırıcısı, testleri çalıştırmak için program giriş noktasını içerir. dotnet test
birim testi projesini kullanarak test çalıştırıcısını başlatır.
Henüz uygulanmadığından test başarısız oluyor IsPrime
. TDD yaklaşımını kullanarak, bu testin geçmesi için yalnızca yeterli kod yazın. Aşağıdaki kodla güncelleştirin IsPrime
:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Not implemented.")
End Function
dotnet test
'i çalıştırın. Test başarılı oldu.
Daha fazla test ekleme
0 ve -1 için asal sayı testleri ekleyin. Önceki testi kopyalayabilir ve aşağıdaki kodu 0 ve -1 kullanacak şekilde değiştirebilirsiniz:
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
Yalnızca bir parametre değiştiğinde test kodunun kopyalanması kod yineleme ve test blobu ile sonuçlanmaktadır. Aşağıdaki xUnit öznitelikleri benzer testlerden oluşan bir paket yazmaya olanak tanır:
[Theory]
aynı kodu yürüten ancak farklı giriş bağımsız değişkenleri olan bir test paketini temsil eder.[InlineData]
özniteliği, bu girişlerin değerlerini belirtir.
Yeni testler oluşturmak yerine, tek bir teori oluşturmak için önceki xUnit özniteliklerini uygulayın. Aşağıdaki kodu değiştirin:
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
aşağıdaki kodla:
<Theory>
<InlineData(-1)>
<InlineData(0)>
<InlineData(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(ByVal value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.False(result, $"{value} should not be prime")
End Sub
Yukarıdaki kodda [Theory]
ve [InlineData]
ikiden küçük birkaç değerin testini etkinleştirin. İki en küçük asal sayıdır.
komutunu çalıştırın dotnet test
, testlerden ikisi başarısız olur. Tüm testlerin başarılı olmasını sağlamak için yöntemini aşağıdaki kodla güncelleştirin IsPrime
:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate < 2 Then
Return False
End If
Throw New NotImplementedException("Not fully implemented.")
End Function
TDD yaklaşımını izleyerek daha fazla başarısız test ekleyin ve ardından hedef kodu güncelleştirin. Testlerin tamamlanmış sürümüne ve kitaplığın tam uygulamasına bakın.
Tamamlanan IsPrime
yöntem, ilkelliği test etme açısından verimli bir algoritma değildir.
Ek kaynaklar
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