Gradle، تست و ساختار پروژه؛ حرفهای بازی کن
پروژه جدی بدون build system و test مثل رستوران بدون آشپزخونهست؛ ظاهر داره، باطن نه.
Gradle Kotlin DSL
خیلی از پروژههای کاتلین با Gradle ساخته میشن. فایل `build.gradle.kts` با خود کاتلین نوشته میشه و dependencyها، پلاگینها و تنظیمات build رو مدیریت میکنه.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
plugins {
kotlin("jvm") version "2.0.0"
}
repositories {
mavenCentral()
}
dependencies {
testImplementation(kotlin("test"))
}
خروجی کنسولی ندارد؛ Gradle با این فایل پلاگین Kotlin، مخزن Maven Central و dependency تست را میشناسد.
ساختار پروژه
معمولاً کد اصلی توی `src/main/kotlin` و تستها توی `src/test/kotlin` قرار میگیرن. همین نظم ساده باعث میشه بعداً پروژهات تبدیل به جنگل آمازون نشه.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
Unit test
تست یعنی قبل از اینکه کاربر باگ رو با فریاد گزارش کنه، خودت محترمانه پیداش کنی. برای منطق مهم، تست بنویس؛ مخصوصاً محاسبات، validation و serviceها.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
import kotlin.test.Test
import kotlin.test.assertEquals
class CalculatorTest {
@Test
fun sumWorks() {
assertEquals(5, 2 + 3)
}
}
اگر تست پاس شود، گزارش تست سبز میشود و یعنی 2 + 3 واقعاً 5 است؛ دنیا هنوز سر جایش است.
Dependencyها
هر کتابخونهای رو بیدلیل اضافه نکن. هر dependency یعنی وزن، ریسک امنیتی و دردسر آپدیت. نیاز واقعی داشتی اضافه کن، نه از روی هیجان.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
نتیجه این درس 🎯
Gradle، ساختار پروژه و تست همان چیزهاییاند که کد تمرینی را تبدیل به پروژه قابل تحویل میکنند. بدون تست، اعتماد به کد بیشتر شبیه توکل کور است.
تمرین! 🧠
یک تست بنویس که تابع ضرب ۳ در ۴ را برابر ۱۲ بررسی کند.
import kotlin.test.Test
import kotlin.test.assertEquals
fun multiply(a: Int, b: Int) = a * b
class MathTest {
@Test
fun multiplyWorks() {
assertEquals(12, multiply(3, 4))
}
}
گزارش تست باید پاس شود؛ یعنی multiply(3, 4) برابر 12 است.