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 öğ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 takip etmek için, örnek kodunu 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şturmak için Komutları.
Bir kabuk penceresi açın.
Aşağıdaki komutu çalıştırın:
dotnet new sln -o unit-testing-using-dotnet-testdotnet new slnkomutu, birim testi yapmak için dotnet test kullanan dizininde yeni bir çözüm oluşturur.Dizini unit-testing-using-dotnet-test klasörüne değiştirin.
Aşağıdaki komutu çalıştırın:
dotnet new classlib -o PrimeService -lang VBdotnet new classlibkomutu, 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Önceki kod:
- Uygulanmadığını belirten bir ileti içeren bir NotImplementedException oluşturur.
- Eğitimin daha sonraki bölümünde güncellenir.
unit-testing-using-dotnet-test dizininde aşağıdaki komutu çalıştırarak sınıf kitaplığı projesini çözüme ekleyin:
dotnet sln add ./PrimeService/PrimeService.vbprojAşağıdaki komutu çalıştırarak PrimeService.Tests projesini oluşturun:
dotnet new xunit -o PrimeService.Tests -lang VBYukarı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 />öğelerini ekleyerek test çalıştırıcısını yapılandırı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.vbprojPrimeServicesınıf kitaplığını 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, dosyayı yeniden adlandırmak için ren komutunu ren işletim sistemi sürümüne güncelleştirin:
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 -lang VB
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.
IsPrime için bir test çağrısı başarısız oluyor. TDD ile başarısız olduğu bilinen bir test yazılır. Testin geçmesini sağlamak için hedef kod güncellenir. Bu yaklaşımı tekrarlamaya, başarısız bir test yazmaya ve ardından hedef kodu geçmesi için güncellemeye 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
[Fact] özniteliği, test çalıştırıcısı tarafından çalıştırılan bir test yöntemini bildirir.
PrimeService.Tests klasöründen dotnet testçalıştırın.
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.
IsPrime uygulanmadığından test başarısız olur. 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şler için değerleri 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 kodu kullanarak
<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
Önceki kodda [Theory] ve [InlineData] ikiden küçük birkaç değerin test edilmesine olanak tanır. İ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 IsPrime yöntemini aşağıdaki kodla güncelleştirin:
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ıneksiksiz uygulamasına bakın.
Tamamlanan IsPrime yöntemi, ilkelliği test etme açısından verimli bir algoritma değildir.
Ek kaynaklar
- xUnit.net resmi sitesi
- ASP.NET Core içinde denetleyici mantığının test edilmesi
dotnet reference add