Bagian ini dirancang untuk memberikan gambaran umum 5 menit kepada para insinyur tentang bagaimana panggilan antar-profil berfungsi dengan SDK dan cara mengujinya. Jangan mencoba membangun apa pun - ini belum dirancang untuk digunakan sebagai referensi atau panduan, tapi hanya sebagai pengantar.
Class dan metode kustom yang mengetahui profil
SDK aplikasi yang terhubung memungkinkan Anda menganotasi class dan metode Anda sendiri sebagai antar-profil. Tindakan ini akan menghasilkan class dan metode yang memungkinkan Anda menjalankan metode yang dianotasi di profil mana pun.
Misalnya, pertimbangkan class berikut, dengan anotasi SDK yang ditambahkan:
public class CalendarDatabase {
@CrossProfile // SDK annotation
public void deleteEvent(Event event, Account account) {
// complex logic with database calls
}
}
Tindakan ini akan menghasilkan class yang diawali dengan Profil, sehingga Anda dapat memanggil API ini pada
profil pilihan Anda. Contoh: java
profileCalendarDatabase.work().deleteEvent(event, account);
Contoh yang lebih kompleks
Secara lebih realistis, class dan metode Anda akan menjadi lebih kompleks. Misalnya,
API yang ada dapat menggunakan jenis nilai yang ditampilkan ListenableFuture
dan Anda mungkin perlu
menggabungkan hasil dari kedua profil. Perhatikan contoh ini:
public class CalendarDatabase {
@CrossProfile // SDK annotation
public ListenableFuture<Collection<Event>> getEvents() {
// complex logic with database calls
}
}
// Merge results from both profiles into a set
profileCalendarDatabase.both()
.getEvents()
.transform((Map<Profile, Collection<Event>> events) -> {
return events.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toSet());
}, directExecutor());
Class dan metode yang dihasilkan ini berfungsi seperti yang diharapkan dengan keamanan dan Pelengkapan kode IDE.
Setiap nilai yang ditampilkan dan jenis parameter dari API yang dianotasi harus didukung oleh
SDK, tetapi sepenuhnya mendukung penyusunan bertingkat dan generik dari daftar, set, array,
primitif, jenis yang dapat dibagi-bagi, dan jenis yang dapat diserialisasi, selain
ListenableFuture
, Optional
, dan proto. Anda juga dapat menambahkan
untuk jenis yang tidak didukung secara native oleh SDK. Sebagai contoh ekstrem,
akan mendukung ListenableFuture<List<Map<CustomProto,
CustomParcelableType[]>>>
dengan lancar.
Pengujian
SDK ini dirancang untuk menyederhanakan pengujian unit. Untuk setiap class Profil yang dihasilkan,
ada class FakeProfile
yang sesuai yang dapat Anda berikan instance kerja dan
pribadi. Contoh:
// Create an instance of the SDK-generated fake connector class. This
// class lets you control the availability of the profiles, which
// profile you are now running on.
private final FakeCrossProfileConnector connector =
new FakeCrossProfileConnector();
// Create an instance of your real/fake/mock class for both profiles.
private final CalendarDatabase personalCalendarDatabase =
new FakeCalendarDatabase();
private final CalendarDatabase workCalendarDatabase =
new FakeCalendarDatabase();
// Create an instance of the SDK-generated fake profile-aware class.
private final FakeProfileCalendarDatabase profileCalendarDatabase =
FakeProfileCalendarDatabase.builder()
.personal(personalCalendarDatabase)
.work(workCalendarDatabase)
.connector(connector)
.build();
// Pass profileCalendarDatabase into your classes under test, or set
// Dagger up to inject the fake automatically.