Pierwsze kroki

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.