Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian · Pelajaran

Pengujian Berasaskan Sifat

ScalaCheck

Pelajaran 3 daripada 413 langkah

Pengujian Berasaskan Sifat ialah pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.

Apakah Pengujian Berasaskan Sifat?

Dalam pengujian berasaskan sifat, anda menyatakan satu sifat umum yang sepatutnya benar untuk semua input, kemudian rangka kerja menjana banyak input rawak untuk cuba menyangkalnya. Cara ini menemui kes pinggir yang mungkin terlepas daripada contoh yang ditulis secara manual.

Contoh berbanding Sifat

Ujian contoh memeriksa satu kes: reverse(List(1,2,3)) == List(3,2,1). Sifat menyatakan satu peraturan: membalikkan dua kali menghasilkan senarai asal, untuk apa-apa senarai. Rangka kerja memeriksa peraturan itu pada beratus-ratus senarai yang dijana.

ScalaCheck

ScalaCheck ialah pustaka pengujian sifat untuk Scala. Tambahkannya sebagai kebergantungan ujian; ia bersepadu dengan ScalaTest.

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

forAll

Binaan terasnya ialah forAll: ia menjana nilai rawak dan menegaskan badan sifat untuk setiap nilai. Di sini kita menguji bahawa operasi tambah adalah kalis tukar tertib.

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

Sifat Pergi Balik

Satu corak yang berkuasa ialah perjalanan pergi balik: pengekodan kemudian penyahkodan (atau pembalikan dua kali) sepatutnya mengembalikan nilai asal untuk apa-apa input.

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

Penjana

ScalaCheck membekalkan penjana Gen untuk jenis terbina dalam secara automatik. Anda juga boleh membina penjana tersuai, contohnya Gen.choose(1, 100) untuk integer dalam julat tertentu.

import org.scalacheck.Gen

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

Menggunakan Penjana Tersuai

Hantar penjana kepada forAll untuk mengehadkan input, contohnya kepada nombor positif sahaja.

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

Pengecilan

Apabila sifat gagal, ScalaCheck mengecilkan input yang gagal kepada contoh terkecil yang masih gagal. Daripada senarai rawak yang besar, anda mendapat contoh balas minimum yang mudah dinyahpepijat.

Sifat Bersyarat

Gunakan whenever untuk mengehadkan sifat kepada input yang memenuhi prasyarat. Input yang tidak memenuhi syarat akan dibuang.

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

Sifat yang Baik untuk Diuji

Kategori sifat yang berguna:

  • Perjalanan pergi balik: kodkan/dekodkan, balikkan/balikkan.
  • Invarian: pengisihan mengekalkan panjang.
  • Hukum algebra: kekalisan tukar tertib, keasosiatifan, identiti.

Bila Perlu Menggunakannya

Pengujian sifat melengkapi ujian contoh; ia tidak menggantikannya. Gunakannya untuk fungsi tulen dengan peraturan matematik atau struktur yang jelas. Kekalkan ujian contoh yang disasarkan untuk kes tertentu yang diketahui dan regresi.

Semakan Pantas

Uji pengetahuan anda tentang pengujian berasaskan sifat.

Imbas Kembali

Anda telah mempelajari pengujian berasaskan sifat dengan ScalaCheck:

  • Nyatakan sifat yang benar untuk semua input; rangka kerja menjana banyak input.
  • forAll mengawal penjanaan; Gen mencipta input tersuai.
  • whenever menambah prasyarat; kegagalan dikecilkan kepada contoh minimum.
  • Sangat sesuai untuk perjalanan pergi balik, invarian dan hukum algebra.
Percuma untuk bermula

Pelajari Scala dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
39
Pelajaran
143

Soalan Lazim

Adakah pelajaran “Pengujian Berasaskan Sifat” percuma?

Ya — teks penuh “Pengujian Berasaskan Sifat” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, tingkat taraf kepada CoddyKit PRO. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengujian Berasaskan Sifat”?

ScalaCheck Anda berlatih Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pengujian Berasaskan Sifat” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian ini?

Ya. Setiap pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Gaya ScalaTest
  2. Pemadan
  3. Pengujian Berasaskan Sifat
  4. Pemuakan dan Lekapan Ujian
← Kembali ke Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian