Matchers
تأكيدات معبّرة
Matchers درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.
ما هي Matchers؟
توفر matchers في ScalaTest صياغة واضحة شبيهة بالإنجليزية للتوكيدات. فبدلًا من كتابة assert(x == 3)، تكتب x shouldBe 3، لتحصل على اختبارات سهلة القراءة ورسائل فشل واضحة.
إضافة Matchers
أضف السمة Matchers إلى مواصفتك لتمكين DSL. وهي تتكامل مع أي نمط من أنماط الاختبار.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class DemoSpec extends AnyFlatSpec with Matchers {
"A value" should "equal itself" in {
val x = 3
x shouldBe 3
}
}مطابقات المساواة
تحقّق من المساواة باستخدام shouldBe أو should equal. فكلاهما يقارن باستخدام ==، لكنهما يُقرآن بصورة طبيعية.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class EqSpec extends AnyFlatSpec with Matchers {
"sum" should "be correct" in {
(2 + 2) shouldBe 4
(2 + 2) should equal (4)
}
}مطابقات المقارنة
تُقرأ المقارنات العددية كالنثر: should be > وshould be <=، كما تستخدم النطاقات be within لتحديد سماحية أعداد الفاصلة العائمة.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class CmpSpec extends AnyFlatSpec with Matchers {
"a number" should "compare" in {
7 should be > 3
7 should be <= 7
2.0 shouldBe 2.0 +- 0.01
}
}مطابقات السلاسل النصية
تتضمن مطابقات السلاسل النصية startWith وendWith وinclude، إضافة إلى التعبيرات النمطية باستخدام fullyMatch regex.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class StrSpec extends AnyFlatSpec with Matchers {
"a string" should "match parts" in {
"hello world" should startWith ("hello")
"hello world" should include ("o w")
"hello world" should endWith ("world")
}
}مطابقات المجموعات
افحص المجموعات بسلاسة باستخدام have size وcontain وcontain allOf، وتحقّق من الفراغ باستخدام shouldBe empty.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class ColSpec extends AnyFlatSpec with Matchers {
"a list" should "have expected contents" in {
List(1, 2, 3) should have size 3
List(1, 2, 3) should contain (2)
List.empty[Int] shouldBe empty
}
}مطابقات Boolean وOption
طابق القيم المنطقية ومحتويات Option مباشرةً باستخدام shouldBe true وshouldBe defined وshould contain للقيمة الداخلية.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class OptSpec extends AnyFlatSpec with Matchers {
"an option" should "be inspected" in {
Some(5) shouldBe defined
Some(5) should contain (5)
None shouldBe empty
}
}دمج المطابقات
ادمج التوقعات باستخدام and وor لإنشاء توكيدات مركبة.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class CombineSpec extends AnyFlatSpec with Matchers {
"a number" should "satisfy both" in {
7 should (be > 0 and be < 10)
}
}اختبار الاستثناءات
استخدم an [Exception] should be thrownBy { ... } أو assertThrows للتحقّق من أن الكود يفشل كما هو متوقع.
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class ExSpec extends AnyFlatSpec with Matchers {
"dividing by zero" should "throw" in {
an [ArithmeticException] should be thrownBy (1 / 0)
}
}لماذا تفيد المطابقات؟
إلى جانب سهولة القراءة، تنتج المطابقات رسائل فشل وصفية. فعند فشل List(1,2) should have size 3، يعرض التقرير الحجم المتوقع والفعلي، بخلاف assert المجرد الذي يكتفي بالإشارة إلى أن القيمة المنطقية كانت false.
shouldBe مقابل should equal
هما متطابقان تقريبًا؛ إذ إن shouldBe أكثر اختصارًا ويعطي رسائل أنظف قليلًا في حالات المساواة البسيطة، بينما يدعم should equal مثيلات Equality المخصّصة للمقارنات المتقدمة.
تحقّق سريع
اختبر معرفتك بالمطابقات.
مراجعة
لقد تعلّمت مطابقات ScalaTest:
- أضف
Matchersلتمكين DSL. - المساواة:
shouldBeوshould equal؛ والمقارنات باستخدامbe >و+- tolerance. - السلاسل النصية:
startWithوinclude؛ والمجموعات:have sizeوcontain. - الاستثناءات:
should be thrownBy. - توفر المطابقات رسائل فشل واضحة ووصفية.
الأسئلة الشائعة
هل درس «Matchers» مجاني؟
نعم — نص درس «Matchers» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.
ماذا ستتعلم في «Matchers»؟
تأكيدات معبّرة تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟
لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Matchers»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟
نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.