बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala · पाठ

Property-Based Testing

ScalaCheck

पाठ 3, कुल 4 में से13 चरण

Property-Based Testing, CoddyKit पर बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

गुण-आधारित परीक्षण क्या है

गुण-आधारित परीक्षण में आप ऐसा सामान्य गुण बताते हैं जो सभी इनपुट के लिए सही होना चाहिए, और ढाँचा उसे गलत सिद्ध करने के प्रयास में अनेक यादृच्छिक इनपुट बनाता है। इससे वे किनारे के मामले मिल जाते हैं जिन्हें हाथ से लिखे उदाहरण छोड़ देते हैं।

उदाहरण बनाम गुण

उदाहरण परीक्षण एक मामले की जाँच करता है: reverse(List(1,2,3)) == List(3,2,1)। गुण एक नियम बताता है: किसी भी सूची को दो बार उलटने पर मूल सूची मिलती है। ढाँचा इस नियम की जाँच सैकड़ों बनाई गई सूचियों पर करता है।

ScalaCheck

ScalaCheck, Scala की गुण-परीक्षण लाइब्रेरी है। इसे परीक्षण निर्भरता के रूप में जोड़ें; यह ScalaTest के साथ एकीकृत होती है।

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

forAll

मुख्य निर्माण forAll है: यह यादृच्छिक मान बनाता है और प्रत्येक के लिए गुण के मुख्य भाग का अभिकथन करता है। यहाँ हम जाँचते हैं कि जोड़ क्रमविनिमेय है।

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

राउंड-ट्रिप गुण

एक शक्तिशाली तरीका राउंड ट्रिप है: एन्कोड करने और फिर डिकोड करने पर (या दो बार उलटने पर) किसी भी इनपुट के लिए मूल मान वापस मिलना चाहिए।

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

जनरेटर

ScalaCheck अंतर्निहित प्रकारों के लिए Gen जनरेटर अपने-आप उपलब्ध कराता है। आप कस्टम जनरेटर भी बना सकते हैं, जैसे सीमित पूर्णांक के लिए 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))

कस्टम जनरेटर का उपयोग

इनपुट को सीमित करने के लिए forAll को एक जनरेटर दें, उदाहरण के लिए केवल धनात्मक संख्याएँ।

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

संकुचन

जब कोई गुण विफल होता है, तो ScalaCheck विफल इनपुट को उस सबसे छोटे उदाहरण तक संकुचित करता है जो अब भी विफल होता है। विशाल यादृच्छिक सूची के बजाय आपको एक न्यूनतम प्रतिउदाहरण मिलता है, जिसे डीबग करना आसान होता है।

सशर्त गुण

किसी पूर्वशर्त को संतुष्ट करने वाले इनपुट तक गुण को सीमित करने के लिए whenever का उपयोग करें। जो इनपुट शर्त पूरी नहीं करते, उन्हें छोड़ दिया जाता है।

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

जाँचने योग्य अच्छे गुण

उपयोगी गुणों की श्रेणियाँ:

  • राउंड ट्रिप: encode/decode, reverse/reverse।
  • अपरिवर्तनीयताएँ: क्रमबद्ध करने पर लंबाई सुरक्षित रहती है।
  • बीजीय नियम: क्रमविनिमेयता, साहचर्यता, पहचान।

इसका उपयोग कब करें

गुण-परीक्षण उदाहरण परीक्षणों का पूरक है; यह उनका स्थान नहीं लेता। इसका उपयोग स्पष्ट गणितीय या संरचनात्मक नियमों वाले शुद्ध फ़ंक्शनों के लिए करें। विशिष्ट ज्ञात मामलों और प्रतिगमन के लिए लक्षित उदाहरण परीक्षण बनाए रखें।

त्वरित जाँच

गुण-आधारित परीक्षण के बारे में अपना ज्ञान जाँचें।

पुनरावलोकन

आपने ScalaCheck के साथ गुण-आधारित परीक्षण सीखा:

  • सभी इनपुट के लिए सत्य गुण बताएँ; ढाँचा अनेक इनपुट बनाता है।
  • forAll निर्माण को संचालित करता है; Gen कस्टम इनपुट बनाता है।
  • whenever पूर्वशर्तें जोड़ता है; विफलताओं को न्यूनतम उदाहरणों तक संकुचित किया जाता है।
  • राउंड ट्रिप, अपरिवर्तनीयताओं और बीजीय नियमों के लिए बहुत उपयोगी।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Scala सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
39
पाठ
143

अक्सर पूछे जाने वाले प्रश्न

क्या “Property-Based Testing” पाठ निःशुल्क है?

हाँ—“Property-Based Testing” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Property-Based Testing” में मैं क्या सीखूँगा?

ScalaCheck आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Property-Based Testing” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. ScalaTest Styles
  2. Matchers
  3. Property-Based Testing
  4. Mocking और Fixtures
← बैकएंड इंजीनियरिंग और कार्यात्मक प्रोग्रामिंग के लिए Scala पर वापस जाएँ