BMI-calculator/TESTING_GUIDE.md
2025-11-06 19:53:25 +07:00

7.3 KiB

🧪 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:

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:

  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

# 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:

  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:

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


🎓 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! 🚀