Aracılığıyla paylaş


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 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-test
    

    dotnet new sln komutu, 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 VB
    

    dotnet new classlib komutu, 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.vbproj
    
  • Aşağıdaki komutu çalıştırarak PrimeService.Tests projesini oluşturun:

    dotnet new xunit -o PrimeService.Tests -lang VB
    
  • 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 />öğ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.vbproj
    
  • PrimeService sı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