Ta sekcja zawiera 5-minutowe omówienie tego, w jaki sposób inżynierowie współdziałają z pakietem SDK i jak można je testować. Nie próbuj nie można tworzyć jeszcze niczego, nie można go traktować jako materiału referencyjnego ani przewodnika, ale tylko w ramach wprowadzenia.
Niestandardowe klasy i metody rozpoznające profil
Pakiet SDK połączonych aplikacji umożliwia dodawanie adnotacji do własnych klas i metod jako do uwierzytelniania krzyżowego. Generuje to klasy i metody, które pozwalają wykonać w dowolnym profilu.
Weźmy na przykład tę klasę z dodaną adnotacją dotyczącą pakietu SDK:
public class CalendarDatabase {
@CrossProfile // SDK annotation
public void deleteEvent(Event event, Account account) {
// complex logic with database calls
}
}
Generuje klasę poprzedzoną prefiksem Profile, co pozwala na wywoływanie tego interfejsu API
z wybranego profilu. Na przykład: java
profileCalendarDatabase.work().deleteEvent(event, account);
Bardziej złożone przykłady
Bardziej realistycznie wyglądające zajęcia i metody będą bardziej złożone. Przykład:
Twój istniejący interfejs API może używać ListenableFuture
typów zwracanych. Możesz potrzebować
, aby połączyć wyniki z obu profili. Przeanalizuj ten przykład:
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());
Te wygenerowane klasy i metody działają zgodnie z oczekiwaniami z pełnym bezpieczeństwem, Uzupełnianie kodu w IDE.
Pakiet SDK musi obsługiwać każdy typ zwracanych wartości i parametrów z oznaczonych interfejsów API. Pakiet SDK obsługuje jednak zagnieżdżanie i typy ogólne list, zbiorów, tablic, typów prymitywnych, dowolnych typów możliwych do podzielenia i dowolnych typów możliwych do serializacji, a także typy ListenableFuture
, Optional
i proto. Możesz też dodać
obsługa typów, które nie są natywnie obsługiwane przez pakiet SDK. Ekstremalnym przykładem jest to,
będzie bezproblemowo obsługiwać ListenableFuture<List<Map<CustomProto,
CustomParcelableType[]>>>
.
Testowanie
Pakiet SDK został zaprojektowany, aby uprościć testowanie jednostkowe. Dla każdej wygenerowanej klasy profilu
istnieje odpowiednia klasa FakeProfile
, w której możesz podać zadanie
do własnych instancji. Na przykład:
// 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.