# ๐Ÿงช Panduan Menjalankan Unit Test - BMI Calculator ## ๐Ÿ“‹ Test Files yang Tersedia Saya telah membuat 4 file unit test: 1. **BmiCalculatorTest.kt** (43 test cases) - Test perhitungan BMI untuk sistem Metric dan Imperial - Test kategori BMI (Underweight, Normal, Overweight, Obese) - Test validasi input (weight & height) - Test boundary values (nilai batas antar kategori) - Test healthy weight range 2. **BmiCategoryTest.kt** (30+ test cases) - Test kategori BMI berdasarkan nilai BMI - Test display names - Test warna untuk setiap kategori - Test boundary values 3. **BmiDataTest.kt** (10 test cases) - Test BmiData data class - Test equality & copy functions 4. **UnitSystemTest.kt** (10 test cases) - Test UnitSystem enum (METRIC & IMPERIAL) - Test display names dan properties --- ## ๐Ÿš€ Cara Menjalankan Test ### Metode 1: Menggunakan Command Line (Windows CMD) #### A. Jalankan SEMUA unit tests: ```cmd cd e:\androidProject\basic-android-kotlin-compose-training-tip-calculator gradlew.bat test ``` #### B. Jalankan test untuk package tertentu: ```cmd gradlew.bat test --tests "com.example.tiptime.*" ``` #### C. Jalankan test untuk class tertentu: ```cmd gradlew.bat test --tests "com.example.tiptime.utils.BmiCalculatorTest" gradlew.bat test --tests "com.example.tiptime.model.BmiCategoryTest" gradlew.bat test --tests "com.example.tiptime.model.BmiDataTest" gradlew.bat test --tests "com.example.tiptime.model.UnitSystemTest" ``` #### D. Jalankan test method tertentu: ```cmd gradlew.bat test --tests "com.example.tiptime.utils.BmiCalculatorTest.calculateBmi_metric_normal_returnsCorrectBmi" ``` #### E. Jalankan test dengan output detail: ```cmd gradlew.bat test --info ``` #### F. Jalankan test dan buat HTML report: ```cmd gradlew.bat test ``` Hasil report akan ada di: `app/build/reports/tests/test/index.html` --- ### Metode 2: Menggunakan Android Studio / IntelliJ IDEA #### A. Jalankan SEMUA test dalam 1 file: 1. Buka file test (misalnya `BmiCalculatorTest.kt`) 2. Klik kanan pada nama class 3. Pilih **"Run 'BmiCalculatorTest'"** (atau tekan `Ctrl+Shift+F10`) #### B. Jalankan 1 test method saja: 1. Klik pada method test yang ingin dijalankan 2. Klik icon โ–ถ๏ธ hijau di sebelah kiri method 3. Atau klik kanan โ†’ **"Run 'methodName()'"** #### C. Jalankan semua test di project: 1. Klik kanan pada folder `test` di Project Explorer 2. Pilih **"Run 'Tests in ...'** 3. Atau: **Run โ†’ Run... โ†’ All Tests** #### D. Jalankan test dengan coverage (untuk lihat code coverage): 1. Klik kanan pada file test 2. Pilih **"Run 'BmiCalculatorTest' with Coverage"** 3. Atau tekan `Ctrl+Shift+F10` dengan Coverage #### E. Lihat hasil test: - Panel **"Run"** di bagian bawah akan menampilkan hasil - โœ… Green = Pass - โŒ Red = Fail - Status summary akan muncul (misalnya: "43 tests passed") --- ### Metode 3: Menggunakan Gradle Task di Android Studio 1. Buka **Gradle** panel (View โ†’ Tool Windows โ†’ Gradle) 2. Navigate ke: `app โ†’ Tasks โ†’ verification โ†’ test` 3. Double-click pada **test** task 4. Hasil akan muncul di panel Run --- ## ๐Ÿ“Š Membaca Hasil Test ### A. Command Line Output ``` > Task :app:testDebugUnitTest com.example.tiptime.utils.BmiCalculatorTest > calculateBmi_metric_normal_returnsCorrectBmi() PASSED com.example.tiptime.utils.BmiCalculatorTest > calculateBmi_metric_underweight_returnsCorrectBmi() PASSED ... BUILD SUCCESSFUL in 15s ``` ### B. HTML Report Setelah menjalankan test, buka file: ``` app/build/reports/tests/test/index.html ``` Report ini menampilkan: - โœ… Total tests, passed, failed, skipped - โฑ๏ธ Durasi execution - ๐Ÿ“Š Success rate (%) - ๐Ÿ“ Breakdown per package dan class - ๐Ÿ“ Detail setiap test case ### C. Android Studio Output Panel Run akan menampilkan: ``` Test Results: โœ… BmiCalculatorTest (43 tests) - PASSED โœ… calculateBmi_metric_normal_returnsCorrectBmi - 12ms โœ… calculateBmi_metric_underweight_returnsCorrectBmi - 8ms โœ… isValidWeight_metric_validWeight_returnsTrue - 5ms ... ``` --- ## ๐ŸŽฏ Test Coverage Summary ### BmiCalculatorTest (43 tests): - โœ… Perhitungan BMI Metric (4 tests) - โœ… Perhitungan BMI Imperial (3 tests) - โœ… Boundary Cases / Batas Kategori (4 tests) - โœ… Validasi Weight Metric (4 tests) - โœ… Validasi Weight Imperial (4 tests) - โœ… Validasi Height Metric (4 tests) - โœ… Validasi Height Imperial (4 tests) - โœ… Healthy Weight Range (2 tests) - โœ… Validation Messages (2 tests) - โœ… Edge Cases (3 tests) ### BmiCategoryTest (30+ tests): - โœ… fromBmi() untuk setiap kategori (16 tests) - โœ… Display Names (4 tests) - โœ… Colors (5 tests) - โœ… Enum Values (1 test) - โœ… Extreme Values (2 tests) - โœ… Real-World Scenarios (4 tests) ### BmiDataTest (10 tests): - โœ… Data Creation (4 tests) - โœ… Equality (3 tests) - โœ… Copy Function (2 tests) ### UnitSystemTest (10 tests): - โœ… Enum Values (4 tests) - โœ… Display Names (2 tests) - โœ… Enum Behavior (4 tests) --- ## ๐Ÿ” Tips & Best Practices ### 1. Jalankan Test Secara Regular ```cmd # Sebelum commit code: gradlew.bat test # Setelah mengubah logic perhitungan: gradlew.bat test --tests "com.example.tiptime.utils.BmiCalculatorTest" ``` ### 2. Watch Mode (Auto-run saat file berubah) ```cmd gradlew.bat test --continuous ``` ### 3. Parallel Execution (Lebih cepat) ```cmd gradlew.bat test --parallel ``` ### 4. Clean sebelum test (jika hasil aneh) ```cmd gradlew.bat clean test ``` ### 5. Debug Test yang Fail Di Android Studio: - Klik kanan pada test yang fail - Pilih **"Debug 'testName()'"** - Set breakpoint untuk inspect values --- ## โœ… Expected Results Jika semua test berhasil, Anda akan melihat: ``` BUILD SUCCESSFUL in 20s 43 actionable tasks: 43 executed ``` Dan di HTML report: ``` Tests: 93 passed, 0 failed, 0 skipped Success rate: 100% ``` --- ## ๐Ÿ› Troubleshooting ### Problem: "Test not found" **Solution:** Pastikan package name sesuai: ```cmd gradlew.bat test --tests "com.example.tiptime.*" ``` ### Problem: "Task 'test' not found" **Solution:** Pastikan Anda di root project: ```cmd cd e:\androidProject\basic-android-kotlin-compose-training-tip-calculator ``` ### Problem: Test gagal dengan assertion error **Solution:** Periksa: 1. Logic di `BmiCalculator.kt` sesuai dengan expected values 2. Boundary values (18.5, 25.0, 30.0) benar 3. Formula perhitungan BMI correct ### Problem: Gradle build error **Solution:** ```cmd gradlew.bat clean gradlew.bat test ``` --- ## ๐Ÿ“ˆ Continuous Integration (CI) Untuk auto-run tests di CI/CD: ### GitHub Actions (`.github/workflows/test.yml`): ```yaml name: Run Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK uses: actions/setup-java@v2 with: java-version: '17' - name: Run tests run: ./gradlew test ``` --- ## ๐Ÿ“š References - JUnit 4 Documentation: https://junit.org/junit4/ - Android Testing Guide: https://developer.android.com/training/testing - Gradle Test Task: https://docs.gradle.org/current/userguide/java_testing.html --- ## ๐ŸŽ“ Next Steps 1. โœ… Jalankan semua test untuk memastikan pass 2. โœ… Review HTML report untuk melihat coverage 3. โœ… Tambahkan test baru jika ada logic baru 4. โœ… Integrate test ke CI/CD pipeline 5. โœ… Maintain test coverage > 80% --- **Total Test Cases: 93+** **Expected Coverage: ~90%+ of business logic** **Execution Time: ~15-30 seconds** Good luck testing! ๐Ÿš€