Sahte Nesneler ve Test Düzenekleri
Test kurulumu
Sahte Nesneler ve Test Düzenekleri, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 4. 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.
Sınama Kurulumu ve Temizleme
Birçok sınama, ortak fikstürlere ihtiyaç duyar: bir sınamadan önce hazırlanan ve sonrasında temizlenen veriler veya kaynaklar. ScalaTest, kurulum kodunu yinelemeden bunları yönetmek için çeşitli yollar sunar.
Basit Fikstür: Yalnızca Bir Yöntem
En basit fikstür, yeni bir durum oluşturan yardımcı bir yöntemdir. Her sınama bu yöntemi çağırarak yalıtımı garanti eder.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class StackSpec extends AnyFlatSpec with Matchers {
def emptyStack(): scala.collection.mutable.Stack[Int] =
scala.collection.mutable.Stack.empty[Int]
"a stack" should "start empty" in {
emptyStack().size shouldBe 0
}
}BeforeAndAfter
Her bir sınamadan önce ve sonra kod çalıştırmak için BeforeAndAfter'ı karışıma dahil ediniz; bunun için before { } ve after { } bloklarını kullanınız.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatest.BeforeAndAfter
class DbSpec extends AnyFlatSpec with Matchers with BeforeAndAfter {
var counter = 0
before { counter = 10 }
after { counter = 0 }
"counter" should "be initialized" in {
counter shouldBe 10
}
}BeforeAndAfterAll
Bir veritabanı bağlantısı veya gömülü sunucu gibi tüm sınama paketi boyunca paylaşılan pahalı kaynaklar için beforeAll ve afterAll ile birlikte BeforeAndAfterAll kullanınız.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.BeforeAndAfterAll
class ServerSpec extends AnyFlatSpec with BeforeAndAfterAll {
override def beforeAll(): Unit = println("start server")
override def afterAll(): Unit = println("stop server")
"server" should "respond" in {
assert(true)
}
}Ödünç Fikstür Örüntüsü
Ödünç örüntüsü, yeni oluşturulmuş bir kaynağı sınama gövdesine aktarır ve sınama başarısız olsa bile finally içinde temizlenmesini garanti eder.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class FileSpec extends AnyFlatSpec with Matchers {
def withBuffer(test: StringBuilder => Any): Unit = {
val buf = new StringBuilder("init")
try test(buf)
finally buf.clear()
}
"a buffer" should "start with init" in withBuffer { buf =>
buf.toString shouldBe "init"
}
}Sahte Nesneler Neden Kullanılır?
Sahte nesne, birim sınamasının hızlı ve belirlenebilir kalması için gerçek bir bağımlılığın (veritabanı veya HTTP istemcisi gibi) yerine kullanılan nesnedir. Sahte nesnenin ne döndüreceğini denetler ve nasıl çağrıldığını doğrularsınız.
Mockito Ekleme
ScalaTest, Mockito ile scalatestplus aracılığıyla tümleşir. Bağımlılığı ekleyip MockitoSugar'ı karışıma dahil ediniz.
libraryDependencies += "org.scalatestplus" %% "mockito-5-10" % "3.2.18.0" % TestBir Yöntem İçin Sahte Davranış Tanımlama
Bir sahte nesne oluşturup davranışını when(...).thenReturn(...) ile programlayınız. Ardından sınama, bu nesneye bağlı olan kodu çalıştırır.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito.when
trait Repo { def find(id: Int): String }
class RepoSpec extends AnyFlatSpec with Matchers with MockitoSugar {
"a repo" should "return stubbed value" in {
val repo = mock[Repo]
when(repo.find(1)).thenReturn("Alice")
repo.find(1) shouldBe "Alice"
}
}Etkileşimleri Doğrulama
Dönüş değerlerinin yanı sıra bir yöntemin beklenen sayıda çağrıldığını verify ile doğrulayabilirsiniz.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito.{verify, times}
trait Logger { def log(msg: String): Unit }
class LogSpec extends AnyFlatSpec with MockitoSugar {
"a service" should "log once" in {
val logger = mock[Logger]
logger.log("hi")
verify(logger, times(1)).log("hi")
}
}Sahte Nesneler, Taslaklar ve Taklitler
Terimler:
- Taslak: önceden belirlenmiş yanıtlar döndürür.
- Sahte nesne: ayrıca etkileşimleri doğrulamanıza olanak tanır.
- Taklit: çalışır durumdaki hafif bir uygulamadır (örneğin bellekte çalışan bir depo).
Basit durumlarda taklitleri veya gerçek nesneleri tercih ediniz; sahte nesneleri yalnızca gerçek dış bağımlılıklar için kullanınız.
Sınamaları Yalıtılmış Tutma
Fikstürlerin ve sahte nesnelerin tek bir amacı vardır: her sınamanın bilinen ve bağımsız bir durumda çalışması. Paylaşılan değiştirilebilir durumu her sınamadan önce sıfırlayınız ve sırasına bağlı, kararsız başarısızlıkları önlemek için değiştirilebilir fikstürleri sınamalar arasında paylaşmaktan kaçınınız.
Hızlı Kontrol
Fikstürler ve sahte nesneler hakkındaki bilginizi sınayınız.
Özet
Fikstürleri ve sahte nesneleri öğrendiniz:
- Fikstürler: yardımcı yöntemler,
BeforeAndAfter,BeforeAndAfterAllve ödünç örüntüsü. - Sahte nesneler (
MockitoSugararacılığıyla):when().thenReturn()ile taslak oluşturma, çağrılarıverifyile denetleme. - Basit durumlarda taklitleri tercih ediniz; dış bağımlılıklar için sahte nesneler kullanınız.
- Her sınamayı yalıtılmış ve sıradan bağımsız tutunuz.
Sıkça Sorulan Sorular
“Sahte Nesneler ve Test Düzenekleri” dersi ücretsiz mi?
Evet — “Sahte Nesneler ve Test Düzenekleri” 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.
“Sahte Nesneler ve Test Düzenekleri” dersinde ne öğreneceğim?
Test kurulumu 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 4. dersidir.
“Sahte Nesneler ve Test Düzenekleri” 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
- ScalaTest Biçimleri
- Eşleştiriciler
- Özellik Tabanlı Test
- Sahte Nesneler ve Test Düzenekleri