0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Özellik Tabanlı Test

ScalaCheck

Özellik Tabanlı Test, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

Özellik Tabanlı Sınama Nedir?

Özellik tabanlı sınamada, tüm girdiler için geçerli olması gereken genel bir özellik belirtirsiniz ve çatı, bu özelliği çürütmeyi denemek için birçok rastgele girdi üretir. Bu yaklaşım, elle yazılmış örneklerin gözden kaçırdığı uç durumları bulur.

Örnek ve Özellik Karşılaştırması

Örnek sınaması tek bir durumu denetler: reverse(List(1,2,3)) == List(3,2,1). Özellik ise bir kural belirtir: herhangi bir listeyi iki kez tersine çevirmek özgün listeyi verir. Çatı bu kuralı üretilmiş yüzlerce liste üzerinde denetler.

ScalaCheck

ScalaCheck, Scala için özellik sınama kitaplığıdır. Bunu bir sınama bağımlılığı olarak ekleyiniz; ScalaTest ile tümleşir.

libraryDependencies += "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0" % Test

forAll

Temel yapı forAll'dır: rastgele değerler üretir ve özellik gövdesini her biri için doğrular. Burada toplamanın değişme özelliğine sahip olduğunu sınarız.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks

class AddSpec extends AnyFlatSpec with Matchers with ScalaCheckPropertyChecks {
  "addition" should "be commutative" in {
    forAll { (a: Int, b: Int) =>
      a + b shouldBe b + a
    }
  }
}

Gidiş-Dönüş Özelliği

Güçlü bir örüntü gidiş-dönüştür: kodlama ve ardından kod çözme (veya iki kez tersine çevirme), herhangi bir girdi için özgün değeri döndürmelidir.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks

class RevSpec extends AnyFlatSpec with Matchers with ScalaCheckPropertyChecks {
  "reverse" should "be its own inverse" in {
    forAll { (xs: List[Int]) =>
      xs.reverse.reverse shouldBe xs
    }
  }
}

Üreteçler

ScalaCheck, yerleşik türler için Gen üreteçlerini otomatik olarak sağlar. Ayrıca özel üreteçler oluşturabilirsiniz; örneğin sınırlı bir tamsayı için Gen.choose(1, 100).

import org.scalacheck.Gen

val smallInt: Gen[Int] = Gen.choose(1, 100)
val nonEmpty: Gen[List[Int]] = Gen.nonEmptyListOf(Gen.choose(0, 9))

Özel Üreteç Kullanma

Girdileri kısıtlamak için forAll'a bir üreteç aktarınız; örneğin yalnızca pozitif sayılar üreten bir üreteç kullanabilirsiniz.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks
import org.scalacheck.Gen

class PosSpec extends AnyFlatSpec with Matchers with ScalaCheckPropertyChecks {
  "abs" should "stay positive" in {
    forAll(Gen.choose(1, 1000)) { (n: Int) =>
      math.abs(n) should be > 0
    }
  }
}

Küçültme

Bir özellik başarısız olduğunda ScalaCheck, başarısız girdiyi hâlâ başarısız olan en küçük örneğe küçültür. Büyük bir rastgele liste yerine hata ayıklaması kolay, en küçük karşı örneği elde edersiniz.

Koşullu Özellikler

Bir özelliği ön koşulu karşılayan girdilerle sınırlamak için whenever kullanınız. Koşulu karşılamayan girdiler atılır.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks

class DivSpec extends AnyFlatSpec with Matchers with ScalaCheckPropertyChecks {
  "division" should "hold for nonzero divisors" in {
    forAll { (a: Int, b: Int) =>
      whenever(b != 0) {
        (a / b) * b + (a % b) shouldBe a
      }
    }
  }
}

Sınanabilecek İyi Özellikler

Yararlı özellik kategorileri:

  • Gidiş-dönüşler: kodla/kod çöz, tersine çevir/tersine çevir.
  • Değişmezler: sıralama uzunluğu korur.
  • Cebirsel yasalar: değişme, birleşme, birim.

Ne Zaman Kullanılmalı?

Özellik sınaması, örnek sınamalarını tamamlar; onların yerini almaz. Bunu, açık matematiksel veya yapısal kuralları olan saf işlevler için kullanınız. Belirli bilinen durumlar ve gerilemeler için hedefli örnek sınamalarını koruyunuz.

Hızlı Kontrol

Özellik tabanlı sınama hakkındaki bilginizi sınayınız.

Özet

ScalaCheck ile özellik tabanlı sınamayı öğrendiniz:

  • Tüm girdiler için doğru olan özellikleri belirtiniz; çatı birçok girdi üretir.
  • forAll üretimi yönetir; Gen özel girdiler oluşturur.
  • whenever ön koşullar ekler; başarısızlıklar en küçük örneklere küçültülür.
  • Gidiş-dönüşler, değişmezler ve cebirsel yasalar için idealdir.

Sıkça Sorulan Sorular

“Özellik Tabanlı Test” dersi ücretsiz mi?

Evet — “Özellik Tabanlı Test” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

“Özellik Tabanlı Test” dersinde ne öğreneceğim?

ScalaCheck Scala for Backend Engineering & Functional Programming ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Özellik Tabanlı Test” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Scala for Backend Engineering & Functional Programming dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ScalaTest Biçimleri
  2. Eşleştiriciler
  3. Özellik Tabanlı Test
  4. Sahte Nesneler ve Test Düzenekleri
← Scala for Backend Engineering & Functional Programming Sayfasına Dön