Scalacheck: إجبار العينة على إرجاع بعض (القيمة) بدلاً من لا شيء

تم إنشاؤها على ١٦ مارس ٢٠١٦  ·  3تعليقات  ·  مصدر: typelevel/scalacheck

أنا أستخدم Scalacheck لتحديد الكائنات التي سيتم استخدامها في اختبارات الوحدة الخاصة بي.

val listingGen = for {
    id <- posNum[Long]
    name <- alphaStr
} yield Listing(id, name)

//I want that listingGen always return me a Listing
listingGen.sample.get

قد listingGen.sample None . كيف يمكنني فرض فحص النطاق لإرجاع Some(Listing) ؟

التعليق الأكثر فائدة

في الحالة العامة ، لا يمكنك ذلك. يمكن أن تفشل مولدات ScalaCheck ، على سبيل المثال إذا كنت تضيف عامل تصفية ( listingGen.suchThat(...) ) ، وهذا الفشل على غرار النوع Option . ومع ذلك ، إذا كنت متأكدًا من أن المولد الخاص بك لن يفشل أبدًا ، فيمكنك ببساطة الاتصال بـ Option.get كما تفعل في المثال أعلاه. أو يمكنك استخدام Option.getOrElse لاستبدال None بقيمة افتراضية.

إذا كنت تعلم أن المولد الخاص بك قد يفشل ، ولكن نادرًا ما يمكنك استخدام Gen.retryUntil(_ => true) . سيؤدي هذا ببساطة إلى إعادة تشغيل المولد إذا فشل. يجب أن تكون حذرًا في هذا الأمر ، حيث قد ينتهي بك الأمر في حلقة غير منتهية.

ال 3 كومينتر

في الحالة العامة ، لا يمكنك ذلك. يمكن أن تفشل مولدات ScalaCheck ، على سبيل المثال إذا كنت تضيف عامل تصفية ( listingGen.suchThat(...) ) ، وهذا الفشل على غرار النوع Option . ومع ذلك ، إذا كنت متأكدًا من أن المولد الخاص بك لن يفشل أبدًا ، فيمكنك ببساطة الاتصال بـ Option.get كما تفعل في المثال أعلاه. أو يمكنك استخدام Option.getOrElse لاستبدال None بقيمة افتراضية.

إذا كنت تعلم أن المولد الخاص بك قد يفشل ، ولكن نادرًا ما يمكنك استخدام Gen.retryUntil(_ => true) . سيؤدي هذا ببساطة إلى إعادة تشغيل المولد إذا فشل. يجب أن تكون حذرًا في هذا الأمر ، حيث قد ينتهي بك الأمر في حلقة غير منتهية.

يبدو مثل هذا ينبغي فقط أن تكون مغلقة؟

👍

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

rossabaker picture rossabaker  ·  24تعليقات

zallesov picture zallesov  ·  16تعليقات

xuwei-k picture xuwei-k  ·  14تعليقات

SethTisue picture SethTisue  ·  7تعليقات

SethTisue picture SethTisue  ·  7تعليقات