Aracılığıyla paylaş


Dotnet test ve MSTest kullanarak Visual Basic .NET Core kitaplıklarını birim testi

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 CoreTü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. Yeni bir çözüm oluşturmak için bu yeni dizinin içinde dotnet new sln çalıştırın. 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 dotnet new classlib -lang VB çalıştırın. 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. Sınıf kitaplığı projesini çözüme eklemek için dotnet sln add .\PrimeService\PrimeService.vbproj çalıştırın.

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 dotnet new mstest -lang VBkullanarak yeni bir proje oluşturun. Bu komut, test kitaplığı olarak MSTest kullanan bir test projesi oluşturur. Oluşturulan şablon, PrimeServiceTests.vbprojiçinde 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. Önceki adımda dotnet new MSTest 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-mstest
    unit-testing-vb-mstest.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests
        Test Source Files
        PrimeServiceTests.vbproj

dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbprojunit-testing-vb-mstest dizini içinde yürüt.

İ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.VBadlı yeni bir Visual Basic dosyası oluşturun. Aşağıdaki 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. <TestMethod> özniteliği, test çalıştırıcısı tarafından çalıştırılan bir yöntemi belirtir. unit-testing-vb-mstest, testleri çalıştırmak ve sınıf kitaplığını oluşturmak için dotnet test çalıştırın ve sonrasında testleri yapın. 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. Ç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-mstest dizininde dotnet test yeniden çalıştırın. 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

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ı <TestMethod> ö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 MSTest öznitelikleri de vardır. <DataRow> özniteliğini <TestMethod> özniteliğiyle birlikte kullanarak bu girişlerin değerlerini belirtebilirsiniz.

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()

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

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

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

dotnet testçalıştırın ve bu testlerden ikisi başarısız olur. Tüm testlerin geçmesini sağlamak için yönteminin başındaki if 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 vekitaplığının tam uygulamasına sahipsiniz.

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.