Scala for Backend Engineering & Functional Programming · Pelajaran

Mocking dan Fixture

Penyiapan pengujian.

Pelajaran 4 dari 413 langkah

Mocking dan Fixture adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Penyiapan dan Pembongkaran Pengujian

Banyak pengujian memerlukan perlengkapan bersama: data atau sumber daya yang disiapkan sebelum pengujian dan dibersihkan setelahnya. ScalaTest menyediakan beberapa cara untuk mengelolanya tanpa menggandakan kode penyiapan.

Perlengkapan Sederhana: Cukup dengan Metode

Perlengkapan paling sederhana adalah metode pembantu yang membuat keadaan baru. Setiap pengujian memanggilnya, sehingga isolasi terjamin.

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

Campurkan BeforeAndAfter untuk menjalankan kode sebelum dan sesudah setiap pengujian menggunakan blok before { } dan after { }.

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

Untuk sumber daya mahal yang digunakan bersama oleh semua pengujian dalam sebuah suite (koneksi basis data atau server tertanam), gunakan BeforeAndAfterAll dengan beforeAll dan afterAll.

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

Pola Perlengkapan Pinjaman

Pola pinjaman meneruskan sumber daya yang baru dibuat ke isi pengujian dan menjamin pembersihan dalam finally, bahkan jika pengujian gagal.

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"
  }
}

Mengapa Menggunakan Tiruan?

Tiruan adalah pengganti dependensi nyata (basis data atau klien HTTP), sehingga pengujian unit tetap cepat dan deterministik. Anda mengendalikan nilai yang dikembalikan tiruan dan memverifikasi cara tiruan tersebut dipanggil.

Menambahkan Mockito

ScalaTest terintegrasi dengan Mockito melalui scalatestplus. Tambahkan dependensinya dan campurkan MockitoSugar.

libraryDependencies += "org.scalatestplus" %% "mockito-5-10" % "3.2.18.0" % Test

Membuat Tiruan Perilaku Metode

Buat tiruan dan atur perilakunya dengan when(...).thenReturn(...). Pengujian kemudian menjalankan kode yang bergantung padanya.

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"
  }
}

Memverifikasi Interaksi

Selain nilai yang dikembalikan, Anda dapat memverifikasi bahwa suatu metode dipanggil sebanyak yang diharapkan dengan verify.

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")
  }
}

Tiruan vs Stub vs Implementasi Palsu

Istilah:

  • Stub: mengembalikan jawaban yang telah ditentukan.
  • Tiruan: juga memungkinkan Anda memverifikasi interaksi.
  • Implementasi palsu: implementasi ringan yang berfungsi (misalnya repositori dalam memori).

Jika sederhana, utamakan implementasi palsu atau objek nyata; gunakan tiruan hanya untuk dependensi eksternal yang benar-benar diperlukan.

Menjaga Isolasi Pengujian

Perlengkapan dan tiruan memiliki satu tujuan: setiap pengujian berjalan dalam keadaan yang diketahui dan mandiri. Atur ulang keadaan bersama yang dapat diubah sebelum setiap pengujian, dan hindari berbagi perlengkapan yang dapat diubah antar-pengujian untuk mencegah kegagalan yang tidak konsisten dan bergantung pada urutan.

Pemeriksaan Singkat

Uji pengetahuan Anda tentang perlengkapan dan pembuatan tiruan.

Rangkuman

Anda telah mempelajari perlengkapan dan pembuatan tiruan:

  • Perlengkapan: metode pembantu, BeforeAndAfter, BeforeAndAfterAll, dan pola pinjaman.
  • Tiruan (melalui MockitoSugar): buat stub dengan when().thenReturn(), periksa pemanggilan dengan verify.
  • Utamakan implementasi palsu untuk kasus sederhana; gunakan tiruan untuk dependensi eksternal.
  • Jaga agar setiap pengujian terisolasi dan tidak bergantung pada urutan.
Gratis untuk memulai

Belajar Scala dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
39
Pelajaran
143

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mocking dan Fixture” gratis?

Ya — teks lengkap “Mocking dan Fixture” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mocking dan Fixture”?

Penyiapan pengujian. Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?

Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Mocking dan Fixture” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?

Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Gaya ScalaTest
  2. Matcher
  3. Pengujian Berbasis Properti
  4. Mocking dan Fixture
← Kembali ke Scala for Backend Engineering & Functional Programming