はじめに

このセクションは、エンジニアが Google Cloud でどのように クロス プロファイル呼び出しが SDK で機能する仕組みと、そのテスト方法について説明します。やってはいけないこと ただし、これはリファレンスやガイドとして使用するようには意図されていませんが、 概要にすぎません。

カスタム プロファイル対応クラスとメソッド

接続されているアプリ SDK を使用すると、独自のクラスとメソッドにアノテーションを付けて、 クロス プロファイルです。これにより、クラスとメソッドが生成され、 アノテーション付きメソッドを使用できます。

たとえば、SDK アノテーションが追加された次のクラスについて考えてみましょう。

public class CalendarDatabase {

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

これにより、接頭辞が「Profile」のクラスが生成され、 選択します。例: java profileCalendarDatabase.work().deleteEvent(event, account);

より複雑な例

より現実的には、クラスとメソッドはより複雑になります。たとえば 既存の API では戻り値の型として ListenableFuture を使用し、 両方のプロファイルの結果を結合できます次の例を考えてみましょう。

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

これらの生成されたクラスとメソッドは、完全な型安全性と IDE コード補完。

アノテーション付きの API の各戻り値とパラメータの型は、 ネストされたフィールドとジェネリクス(リスト、セット、配列、 すべての Parcelable 型、シリアル化可能な型に加えて、 ListenableFutureOptional、proto。SDK でネイティブにサポートされていないタイプのサポートを追加することもできます。極端な例として、ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>> をシームレスにサポートします。

テスト

この SDK は、単体テストを簡素化できるように設計されています。生成された Profile クラスごとに、 対応する FakeProfile クラスがあります。クラスでは、 割り当てることができます。例:

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