시작하기

이 섹션에서는 엔지니어가 어떻게 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의 각 반환 및 매개변수 유형은 이 SDK는 목록, 세트, 배열, 프리미티브, 모든 parcelable 유형, 직렬화 가능한 유형 등 ListenableFuture, Optional, proto 또한 SDK에서 기본적으로 지원하지 않는 유형을 지원합니다. 극단적인 예로, ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>>를 원활하게 지원합니다.

테스트

SDK는 단위 테스트를 간소화하도록 설계되었습니다. 생성된 각 프로필 클래스에 대해 작업을 제공할 수 있는 상응하는 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.