Pengujian Berasaskan Sifat
ScalaCheck
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" % TestforAll
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.
forAllmengawal penjanaan;Genmencipta input tersuai.whenevermenambah prasyarat; kegagalan dikecilkan kepada contoh minimum.- Sangat sesuai untuk perjalanan pergi balik, invarian dan hukum algebra.
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
- Gaya ScalaTest
- Pemadan
- Pengujian Berasaskan Sifat
- Pemuakan dan Lekapan Ujian