이 섹션에서는 엔지니어가 어떻게 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.