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 öğ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. Ö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. bir ASP.NET Core projesini test ediyorsanız bkz. ASP.NET Core
Önkoşullar
- .NET 8 SDK veya sonraki sürümleri.
- Tercih ettiğiniz bir metin veya kod düzenleyicisi.
Kaynak projeyi oluşturma
Bir kabuk penceresi açın. Çözümü tutmak için unit-testing-with-fsharp adlı bir dizin oluşturun. Bu yeni dizinin içinde aşağıdaki komutu çalıştırarak sınıf kitaplığı ve test projesi için yeni bir çözüm dosyası oluşturun:
dotnet new sln
Ardından bir MathService dizini oluşturun. Şu ana hat, şu ana kadarki dizin ve dosya yapısını gösterir:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
MathService'i geçerli dizin yapın ve aşağıdaki komutu çalıştırarak kaynak projeyi oluşturun:
dotnet new classlib -lang "F#"
Matematik hizmetinin başarısız bir uygulamasını oluşturursunuz:
module MyMath =
let squaresOfOdds xs = raise (System.NotImplementedException("You haven't written a test yet!"))
Dizini yeniden unit-testing-with-fsharp dizinine değiştirin. Çözüme sınıf kitaplığı projesini eklemek için aşağıdaki komutu çalıştırın:
dotnet sln add .\MathService\MathService.fsproj
Test projesini oluşturma
Ardından MathService.Tests dizinini oluşturun. Aşağıdaki ana hat dizin yapısını gösterir:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
Source Files
MathService.fsproj
/MathService.Tests
MathService.Tests dizinini geçerli dizin yapın ve aşağıdaki komutu kullanarak yeni bir proje oluşturun:
dotnet new nunit -lang "F#"
Bu komut, test çerçevesi olarak NUnit kullanan bir test projesi oluşturur. Oluşturulan şablon MathServiceTests.fsproj dosyasında test çalıştırıcısını yapılandırıyor:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="NUnit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>
Test projesi, birim testleri oluşturmak ve çalıştırmak için başka paketler gerektirir.
dotnet new önceki adımda NUnit ve NUnit test bağdaştırıcısı eklendi. Şimdi MathService sınıf kitaplığını projeye başka bir bağımlılık olarak ekleyin.
dotnet reference add komutunu kullanın:
dotnet reference add ../MathService/MathService.fsproj
Dosyanın tamamını GitHub'daki örnekleri deposunda görebilirsiniz.
Aşağıdaki son çözüm düzenine sahipsiniz:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
Source Files
MathService.fsproj
/MathService.Tests
Test Source Files
MathService.Tests.fsproj
Unit-testing-with-fsharp dizininde aşağıdaki komutu yürütür:
dotnet sln add .\MathService.Tests\MathService.Tests.fsproj
İlk testi oluşturma
Başarısız bir test yazar, başarılı olur ve işlemi tekrarlarsınız. UnitTest1.fs dosyasını açın ve aşağıdaki kodu ekleyin:
namespace MathService.Tests
open System
open NUnit.Framework
open MathService
[<TestFixture>]
type TestClass () =
[<Test>]
member this.TestMethodPassing() =
Assert.That(true, Is.True)
[<Test>]
member this.FailEveryTime() = Assert.That(false, Is.True)
özniteliği, [<TestFixture>] testleri içeren bir sınıfı belirtir. özniteliği, [<Test>] test çalıştırıcısı tarafından çalıştırılan bir test yöntemini belirtir.
Unit-testing-with-fsharp dizininden testleri ve sınıf kitaplığını derlemek ve ardından testleri çalıştırmak için dotnet test komutunu çalıştırın. NUnit 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.
Bu iki test en temel geçiş ve başarısız testleri gösterir.
My test geçer ve Fail every time başarısız olur. Şimdi squaresOfOdds yöntemi için bir test oluşturun. yöntemi, squaresOfOdds giriş dizisinin parçası olan tüm tek tamsayı değerlerinin karelerinin bir dizisini döndürür. Bu işlevlerin tümünü aynı anda yazmaya çalışmak yerine, işlevselliği doğrulayan testleri yinelemeli olarak oluşturabilirsiniz. Her testi geçmek için yönteme gerekli işlevselliği oluşturursunuz.
En basit yazabileceğiniz test, tüm çift sayılarla squaresOfOdds parametresini çağırmaktır ve sonucun boş bir tamsayı dizisi olması gerekir. Bu test şu şekildedir:
[<Test>]
member this.TestEvenSequence() =
let expected = Seq.empty<int>
let actual = MyMath.squaresOfOdds [2; 4; 6; 8; 10]
Assert.That(actual, Is.EqualTo(expected))
Dizinin expected listeye dönüştürüldüğüne dikkat edin. NUnit çerçevesi birçok standart .NET türüne dayanır. Bu bağımlılık, ortak arabiriminizin ve beklenen sonuçların ICollection yerine IEnumerable desteklediği anlamına gelir.
Testi çalıştırdığınızda, testinizin başarısız olduğunu görürsünüz. Bunun nedeni, uygulamayı henüz oluşturmamış olmanızdır. MathService projenizdeki library.fs sınıfında çalışan en basit kodu yazarak bu testi geçirin:
let squaresOfOdds xs =
Seq.empty<int>
Unit-testing-with-fsharp dizininde yeniden çalıştırındotnet test.
dotnet test komutu, MathService projesi ve ardından MathService.Tests projesi için bir derleme çalıştırır. Her iki proje de oluşturulduktan sonra testlerinizi çalıştırır. Şimdi iki test geçiyor.
Gereksinimleri tamamlama
İlk testi başarıyla geçtiğinize göre, şimdi daha fazla test yazmanın zamanı geldi. Sonraki basit durum, tek sayısı sadece 1 olan bir diziyle çalışır. 1 sayısı daha kolaydır çünkü 1'in karesi 1'dir. Sonraki test şu şekildedir:
[<Test>]
member public this.TestOnesAndEvens() =
let expected = [1; 1; 1; 1]
let actual = MyMath.squaresOfOdds [2; 1; 4; 1; 6; 1; 8; 1; 10]
Assert.That(actual, Is.EqualTo(expected))
dotnet test Yürütme işlemi yeni testte başarısız oluyor. Bu yeni testi işlemek için squaresOfOdds yöntemini güncellemelisiniz. Bu testin başarılı olması için çift sayıların tümünü sıralama dışında filtrelemeniz gerekir. Bunu yapmak için küçük bir filtre işlevi yazıp komutunu kullanabilirsiniz Seq.filter:
let private isOdd x = x % 2 <> 0
let squaresOfOdds xs =
xs
|> Seq.filter isOdd
Yapılacak bir adım daha var: Tek sayıların her birinin karesini alın. Yeni bir test yazarak başlayın:
[<Test>]
member public this.TestSquaresOfOdds() =
let expected = [1; 9; 25; 49; 81]
let actual = MyMath.squaresOfOdds [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
Assert.That(actual, Is.EqualTo(expected))
Her bir tek sayının karesini hesaplamak için filtrelenmiş diziyi bir haritalama işlemi aracılığıyla ileterek testi düzeltebilirsiniz.
let private square x = x * x
let private isOdd x = x % 2 <> 0
let squaresOfOdds xs =
xs
|> Seq.filter isOdd
|> Seq.map square
Küçük bir kitaplık ve bu kitaplık için bir dizi birim testi oluşturdunuz. Çözümü, yeni paketlerin ve testlerin eklenmesinin normal iş akışının bir parçası olması için yapılandırmışsınız. Zamanınızın ve çabanızın çoğunu uygulamanın hedeflerini çözmeye yoğunlaştırmıştınız.
Ayrıca bkz.
- dotnet reference add komutunu kullanın
- dotnet testi