تست خواص برنامه یا Property Based Testing

وقتی تست برای یک حالت خاص برنامه مینویسیم خیلی وقت ها بعضی شرایط خاص را در نظر نمی گیریم و با اینکه تمام تست ها pass می شوند, باگ در برنامه حضور داره.
یکی از راه های کم تر کردن این سناریو و تقویت تست ها استفاده از تست خواص یا Property Based Testing هستش. این متود اولین بر توسط John Hughes در برنامه QuickCheck
در زبان هسکل پیاده شد و بعد در زبان های دیگه کتابخانه های شبیه ساخته شد
در Property Based Testing ما فقط شرح میدیم که ورودی و خروجی چه خواصی دارند و کتابخانه به صورت اتوماتیک ورودی های تصادفی می سازه و بارها function را تست میکنه تا بتونه یک مثال نقض پیدا کنه

مثال اسکالا

object StringSpecification extends Properties("String") {

  property("concatenate") = forAll { (a: String, b: String) =>
    (a+b).length > a.length && (a+b).length > b.length
  }

}

خروجی

+ String.startsWith: OK, passed 100 tests.
! String.concat: Falsified after 0 passed tests.
> ARG_0: ""
> ARG_1: ""
+ String.substring: OK, passed 100 tests.

اینجا وقتی دو string خالی باشند شرط ما نقض میشه

7 پسندیده

باگ ها و مشکلاتی رو که تا حالا با این روش پیدا کردیم و فیکس کردیم رو غیر ممکن هست با روش های معمولی تست نرم افزار بشه پیدا کرد. به شدت راضیم از این روش

5 پسندیده

این talk خوبیه درمورد ساختن Generator برای Property ها

5 پسندیده