Başlarken

Bu bölüm, mühendislere bu alanda 5 dakikalık bir genel bakış Profiller arası çağrılar SDK ile çalışır ve nasıl test edilebilir? Bu nedenle bir referans veya kılavuz olarak kullanılmak üzere tasarlanmamıştır, giriş amaçlı olarak yapıyorum.

Özel profile duyarlı sınıflar ve yöntemler

Bağlı uygulamalar SDK'sı, kendi sınıf ve yöntemlerinize profiller arası olarak ek açıklama eklemenize olanak tanır. Bu komut, herhangi bir profilde not eklenmiş yöntem.

Örneğin, SDK ek açıklaması eklenmiş aşağıdaki sınıfı ele alalım:

public class CalendarDatabase {

  @CrossProfile // SDK annotation
  public void deleteEvent(Event event, Account account) {
    // complex logic with database calls
  }
}

Bu işlem, Profile ön ekine sahip bir sınıf oluşturur ve bu API'yi şurada çağırmanıza olanak tanır: tercih edebilirsiniz. Örneğin: java profileCalendarDatabase.work().deleteEvent(event, account);

Daha karmaşık örnekler

Daha gerçekçi bir ifadeyle, sınıflarınız ve yöntemleriniz daha karmaşık olacaktır. Örneğin, Mevcut API'niz ListenableFuture dönüş türünü kullanabilir. kullanarak iki profilden alınan sonuçları birleştirebilirsiniz. Aşağıdaki örneğe bakın:

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());

Oluşturulan bu sınıflar ve yöntemler, tam tür güvenlik ve IDE kod tamamlama.

Notlandırılmış API'lerinizin her bir döndürme ve parametre türü SDK tarafından desteklenmelidir. Ancak SDK, ListenableFuture, Optional ve proto'ların yanı sıra listelerin, kümelerin, dizilerin, ilkellerin, tüm paketlenebilir türlerin ve tüm serileştirilebilir türlerin iç içe yerleştirilmesini ve genel türlerini tamamen destekler. Ayrıca, SDK tarafından yerel olarak desteklenmeyen türler için destek. Aşırı bir örnek vermek gerekirse ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>> adlı veri kaynağını sorunsuz bir şekilde destekler.

Test

SDK, birim testini basitleştirmek için tasarlanmıştır. Oluşturulan her Profil sınıfı için çalışmanızı sağlayabileceğiniz karşılık gelen bir FakeProfile sınıfı vardır ve bazı örnekler vereceğim. Örneğin:

// 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.