Fitur yang harus ada pada aplikasi.
Mempertahankan Fitur dari Submission Sebelumnya
Syarat yang harus dipenuhi sebagai berikut.Pastikan berbagai fitur yang ada dalam submission sebelumnya berjalan dengan baik.
Menampilkan Maps
Syarat yang harus dipenuhi sebagai berikut.Menampilkan satu halaman baru berisi peta yang menampilkan semua cerita yang memiliki lokasi dengan benar. Bisa berupa marker maupun icon berupa gambar. Data story yang memiliki lokasi latitude dan longitude dapat diambil melalui parameter location seperti berikut
Paging List
Syarat yang harus dipenuhi sebagai berikut.Menampilkan list story dengan menggunakan Paging 3 dengan benar.
Membuat Testing
Syarat yang harus dipenuhi sebagai berikut.Menerapkan unit test pada fungsi yang ada di setiap ViewModel.
Tuliskan skenario test pada berkas tersendiri dengan nama skenario-pengujian.txt di dalam root folder project. Untuk format penulisan skenario pengujian, Anda bisa melihat contoh di modul Latihan Unit Testing LiveData.
Berikut kerangka tampilan yang bisa Anda gunakan sebagai referensi.
Submission Anda akan dinilai oleh reviewer dengan skala 1-5 berdasarkan dari parameter yang ada.
Anda dapat menerapkan beberapa saran di bawah ini untuk mendapatkan nilai tinggi.
- Menuliskan kode dengan bersih.
- Bersihkan comment dan kode yang tidak digunakan.
- Indentasi yang sesuai.
- Menghapus import yang tidak digunakan.
- Menambahkan informasi selama proses interaksi dengan API:
- Loading ketika memuat data
- Informasi error ketika gagal
- Pesan informasi ketika tidak ada data
- Menggunakan custom map style tersendiri pada Google Maps.
- Menggunakan Paging 3 dengan menggunakan RemoteMediator.
- Menambahkan input lokasi saat ini dari GPS ketika tambah cerita.
- Menerapkan Android Architecture Component (minimal ViewModel dan LiveData) dengan benar.
- Menambahkan test case untuk skenario pengujian, seperti:
- data kosong,
- data gagal dimuat, atau
- skenario sejenisnya.
Menerapkan integration test pada halaman list story/daftar cerita. (Tandai dengan menggunakan anotasi @MediumTest).
Menerapkan end-to-end test dan idling resources untuk memastikan fitur-fitur yang ada berjalan dengan semestinya. (Tandai dengan menggunakan anotasi @LargeTest).
Detail penilaian submission.
- Bintang 1 : Semua ketentuan terpenuhi, namun penulisan kode masih perlu banyak diperbaiki atau terindikasi melakukan plagiat.
- Bintang 2 : Semua ketentuan terpenuhi, tetapi penulisan kode masih perlu diperbaiki.
- Bintang 3 : Semua ketentuan terpenuhi, tetapi hanya mengikuti seperti apa yang ada pada modul.
- Bintang 4 : Semua ketentuan terpenuhi dan menerapkan minimal empat (4) saran yang ada di atas.
- Bintang 5 : Semua ketentuan terpenuhi dan menerapkan semua saran yang ada di atas.
Catatan:
Jika submission Anda ditolak, maka tidak ada penilaian. Kriteria penilaian bintang di atas hanya berlaku jika submission Anda lulus.
Submission akan ditolak jika tidak sesuai kriteria. Berikut poin-poin yang harus diperhatikan.
- Tidak mempertahankan fitur-fitur dari submission sebelumnya.
- Tidak ada tampilan daftar cerita dalam bentuk peta.
- List story tidak dapat mengakses halaman berikutnya secara otomatis.
- Tidak menerapkan Paging 3.
- Paging 3 memuat data terus menerus.
- Maps tampil tapi tidak ada marker.
- Ada marker namun tidak ada data yang ditampilkan.
- Tidak menuliskan skenario Testing.
- Tidak menerapkan Unit Test dengan baik.
- Seluruh fungsi yang ada pada kelas ViewModel belum dites.
- Kelas yang akan diuji menggunakan mock object, seharusnya real object.
- Penamaan test case tidak deskriptif sesuai skenario.
- Project tidak bisa di-build.
- Aplikasi force closed.
- Mengirimkan file selain proyek Android Studio.
- Mengirimkan proyek yang bukan karya sendiri.
Jika mengalami kesulitan, Anda bisa menanyakan langsung ke forum diskusi. https://www.dicoding.com/academies/352/discussions.
- Story API. API untuk berbagi story seputar Dicoding, mirip seperti post Instagram namun spesial untuk Dicoding. Dokumentasi dapat dilihat di https://story-api.dicoding.dev/v1
- Simpan token yang didapatkan ketika login karena dibutuhkan untuk request lainnya.
- Supaya tetap bersih, data yang dikirimkan akan otomatis hilang setelah satu jam.
Ketika mengerjakan submission, mungkin Anda mengalami kendala. Oleh karena itu, kami mengumpulkan beberapa kendala yang sering ditemui siswa-siswa lain. Agar kendala tersebut tidak terulang kepada Anda, kami telah mengumpulkan tips untuk menanggulanginya.
Berikut adalah beberapa tips yang dapat Anda gunakan dalam pembuatan submission.
- Kesalahan pemanggilan fungsi (invocation) yang dites.
Sebagai contoh, apabila Anda menguji kelas Repository atau bisa dikatakan Repository sebagai SUT(System Under Test), pastikan actual data yang diperiksa berasal dari pemanggilan fungsi di dalam Repository, bukan kelas lain seperti ApiService atau DAO. Ingat bahwa yang ingin kita uji adalah logika di dalam kelas Repository, bukan?- Contoh salah
// Di dalam kelas Repository val actualStory = apiService.getStory()
- Contoh benar
// Di dalam kelas Repository val actualStory = storyRepository.getStory()
- Contoh salah
- Jangan mock kelas yang sedang diuji (SUT).
Sebagai contoh, apabila Anda menguji kelas ViewModel, jangan mock kelas tersebut, gunakan object aslinya. Apabila kelas tersebut di-mock, pasti akan berhasil karena fungsi yang di-mock dan fungsi yang diperiksa sama, tidak ada pengujian logika sama sekali di sana. Ingat bahwa Mock hanya digunakan untuk dependency.- Contoh salah
// Di dalam kelas ViewModel @Mock private lateinit var viewModel: StoryViewModel ... `when`(viewModel.getStory()).thenReturn(expectedStory) val actualStory = storyViewModel.getStory().getOrAwaitValue()
- Contoh benar
// Di dalam kelas ViewModel private lateinit var storyViewModel: StoryViewModel @Mock private lateinit var storyRepository: StoryRepository ... storyViewModel = StoryViewModel(storyRepository) // di @Before ... `when`(storyRepository.getStory()).thenReturn(expectedStory) val actualStory = storyViewModel.getStory().getOrAwaitValue()
- Contoh salah