این روزها تقریبا یکسالگی TUnit است. یه کتابخونه جدید برای نوشتن Unit، Integration، Acceptance و هر جور تست دیگهای توی داتنت. حدود ۱۹۱هزار دانلود NuGet داشته و توسعهاش فعلا خیلی فعاله و جزو گیتهاب ترند هست.
این روزها تقریبا یکسالگی TUnit است. یه کتابخونه جدید برای نوشتن Unit، Integration، Acceptance و هر جور تست دیگهای توی داتنت. حدود ۱۹۱هزار دانلود NuGet داشته و توسعهاش فعلا خیلی فعاله و جزو گیتهاب ترند هست.
ولی چرا؟
خب میدونیم که NUnit عملا پورت شدهی JUnit جاوا است، و xUnit انشعابی بهبود یافته از NUnit.
خود NUnit که باقیمانده دوران SharpTestEx و Lin Unit و NUnitEx و NUnitAsp است که حتی ریپوهاشون هم هفت کفن پوسوندن، نزدیک به ۲۰ سال قدمت داره. درسته که همواره بهروز شده و پوستاندازی داشته و امروز یه محصول بالغه؛ ولی مدتهاست تغییرات بزرگی نداره و فقط باگ و بوگ (بوگ به مفهوم باگچه، و باگ کوچک است) برطرف میکنه. (تاریخچه JUnit هم برمیگرده به یه پرواز بین زوریخ و آتلانتا در سال ۱۹۹۷! و الان نسل پنجم خودش رو تجربه میکنه)
واقعیت اینه که دنیای تست از نظر مفهوم و ساختار تغییرات انقلابی خاصی نداشته. لذا این لایبریها هم فرصت داشتن تا بالغ و پایدار بشن.
چی شد که TUnit متولد شد؟
اون لکلکی که TUnit رو توی گیتهاب git push کرد، و خودش هم میگه از NUnit و xUnit الهام گرفته، چند تا هدف داشت:
- یکی کدبیس مدرن از ابتدا
- بهبود سرعت اجرای تست
دقت کنید که این داستان «هیچ ربطی» به تیمی که هنوز توی بدیهیات تستنویسی گیر کرده و کاوریجش ۳۰ درصده نداره! بلکه برای تیمیه که میخواد از یک کتابخونه برای همه نوع تستش استفاده کنه، هزاران تست داره و سرعت اجرای تستها میتونه تجربه توسعهدهنده و دواپس رو بهبود بده.
مثلا: TUnit از source generators تا جای امکان به جای reflection استفاده میکنه و AOT رو به خوبی پشتیبانی میکنه.
مثال دوم: کدبیس مدرنش به شما Hooks, Events روی کل Lifecycles تست میده؛ یعنی قبل و بعد از ،TestDiscover ،TestSession، Assembly، Class، Test. مثلا شما با ایونت مطلع میشید تست شروع شد، تست وارد فلان مرحله شد و... این هم به درد تستنویس میخوره هم بهدرد اون بدبختی که پایپلاین DevOps شما رو توسعه میده.
مثال سوم: از بیخ به شما اجازه پاس دادن انواع داده برای تست رو میده. این به معنای ناتوانی xUnit نیست، بلکه پیادهسازی راحتتر و مدرنتره. وقتی شما سرعت 321.7 میلیثانیه TUnit در مقابل ۱۴ ثانیه xUnit به کارتون میاد، که اولا «واقعنکی» (به معنی خیلی واقعی) تست مینویسید. دوم اینکه تعداد زیادی تست دارید و... البته این تفاوت زیاد، فقط در برخی موارد است چون TUnit قابلیت AOT دارد و در خیلی از موارد تفاوت حداقل هنوز اینقدرها نیست.
ولی این سرعت توسعه مداوم و یکپارچگی با IDEها وقابلیت Analyzer درونی اونم از ابتدای راه و اقبالی که جامعه داتنت بهش داشته، آینده خوبی براش رقم میزنه. خدا از من نگذره اگر ذرهای قصد «امروزه عصر، عصر توسعه تست با TUnit است» داشته باشم... 😅 ایهاالناس: شما «بِتِست، بمیر و بِتِست!»
ریپو
مستندات