7.3 KiB
7.3 KiB
🧪 Panduan Menjalankan Unit Test - BMI Calculator
📋 Test Files yang Tersedia
Saya telah membuat 4 file unit test:
-
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
-
BmiCategoryTest.kt (30+ test cases)
- Test kategori BMI berdasarkan nilai BMI
- Test display names
- Test warna untuk setiap kategori
- Test boundary values
-
BmiDataTest.kt (10 test cases)
- Test BmiData data class
- Test equality & copy functions
-
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:
cd e:\androidProject\basic-android-kotlin-compose-training-tip-calculator
gradlew.bat test
B. Jalankan test untuk package tertentu:
gradlew.bat test --tests "com.example.tiptime.*"
C. Jalankan test untuk class tertentu:
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:
gradlew.bat test --tests "com.example.tiptime.utils.BmiCalculatorTest.calculateBmi_metric_normal_returnsCorrectBmi"
E. Jalankan test dengan output detail:
gradlew.bat test --info
F. Jalankan test dan buat HTML report:
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:
- Buka file test (misalnya
BmiCalculatorTest.kt) - Klik kanan pada nama class
- Pilih "Run 'BmiCalculatorTest'" (atau tekan
Ctrl+Shift+F10)
B. Jalankan 1 test method saja:
- Klik pada method test yang ingin dijalankan
- Klik icon ▶️ hijau di sebelah kiri method
- Atau klik kanan → "Run 'methodName()'"
C. Jalankan semua test di project:
- Klik kanan pada folder
testdi Project Explorer - Pilih "Run 'Tests in ...'
- Atau: Run → Run... → All Tests
D. Jalankan test dengan coverage (untuk lihat code coverage):
- Klik kanan pada file test
- Pilih "Run 'BmiCalculatorTest' with Coverage"
- Atau tekan
Ctrl+Shift+F10dengan 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
- Buka Gradle panel (View → Tool Windows → Gradle)
- Navigate ke:
app → Tasks → verification → test - Double-click pada test task
- 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
# 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)
gradlew.bat test --continuous
3. Parallel Execution (Lebih cepat)
gradlew.bat test --parallel
4. Clean sebelum test (jika hasil aneh)
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:
gradlew.bat test --tests "com.example.tiptime.*"
Problem: "Task 'test' not found"
Solution: Pastikan Anda di root project:
cd e:\androidProject\basic-android-kotlin-compose-training-tip-calculator
Problem: Test gagal dengan assertion error
Solution: Periksa:
- Logic di
BmiCalculator.ktsesuai dengan expected values - Boundary values (18.5, 25.0, 30.0) benar
- Formula perhitungan BMI correct
Problem: Gradle build error
Solution:
gradlew.bat clean
gradlew.bat test
📈 Continuous Integration (CI)
Untuk auto-run tests di CI/CD:
GitHub Actions (.github/workflows/test.yml):
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
- ✅ Jalankan semua test untuk memastikan pass
- ✅ Review HTML report untuk melihat coverage
- ✅ Tambahkan test baru jika ada logic baru
- ✅ Integrate test ke CI/CD pipeline
- ✅ Maintain test coverage > 80%
Total Test Cases: 93+
Expected Coverage: ~90%+ of business logic
Execution Time: ~15-30 seconds
Good luck testing! 🚀