### Question:
Transition implements Cloneable { public boolean isTransitionRequired(@Nullable TransitionValues startValues, @Nullable TransitionValues endValues) { boolean valuesChanged = false; if (startValues != null && endValues != null) { String[] properties = getTransitionProperties(); if (properties != null) { for (String property : properties) { if (isValueChanged(startValues, endValues, property)) { valuesChanged = true; break; } } } else { for (String key : startValues.values.keySet()) { if (isValueChanged(startValues, endValues, key)) { valuesChanged = true; break; } } } } return valuesChanged; } Transition();  Transition(Context context, AttributeSet attrs); @NonNull Transition setDuration(long duration); long getDuration(); @NonNull Transition setStartDelay(long startDelay); long getStartDelay(); @NonNull Transition setInterpolator(@Nullable TimeInterpolator interpolator); @Nullable TimeInterpolator getInterpolator(); @Nullable String[] getTransitionProperties(); @Nullable Animator createAnimator(@NonNull ViewGroup sceneRoot,
            @Nullable TransitionValues startValues, @Nullable TransitionValues endValues); void setMatchOrder(@MatchOrder int... matches); abstract void captureStartValues(@NonNull TransitionValues transitionValues); abstract void captureEndValues(@NonNull TransitionValues transitionValues); @NonNull Transition addTarget(@NonNull View target); @NonNull Transition addTarget(@IdRes int targetId); @NonNull Transition addTarget(@NonNull String targetName); @NonNull Transition addTarget(@NonNull Class targetType); @NonNull Transition removeTarget(@NonNull View target); @NonNull Transition removeTarget(@IdRes int targetId); @NonNull Transition removeTarget(@NonNull String targetName); @NonNull Transition removeTarget(@NonNull Class target); @NonNull Transition excludeTarget(@NonNull View target, boolean exclude); @NonNull Transition excludeTarget(@IdRes int targetId, boolean exclude); @NonNull Transition excludeTarget(@NonNull String targetName, boolean exclude); @NonNull Transition excludeChildren(@NonNull View target, boolean exclude); @NonNull Transition excludeChildren(@IdRes int targetId, boolean exclude); @NonNull Transition excludeTarget(@NonNull Class type, boolean exclude); @NonNull Transition excludeChildren(@NonNull Class type, boolean exclude); @NonNull List<Integer> getTargetIds(); @NonNull List<View> getTargets(); @Nullable List<String> getTargetNames(); @Nullable List<Class> getTargetTypes(); @Nullable TransitionValues getTransitionValues(@NonNull View view, boolean start); @RestrictTo(LIBRARY_GROUP) void pause(View sceneRoot); @RestrictTo(LIBRARY_GROUP) void resume(View sceneRoot); boolean isTransitionRequired(@Nullable TransitionValues startValues,
            @Nullable TransitionValues endValues); @NonNull Transition addListener(@NonNull TransitionListener listener); @NonNull Transition removeListener(@NonNull TransitionListener listener); void setPathMotion(@Nullable PathMotion pathMotion); @NonNull PathMotion getPathMotion(); void setEpicenterCallback(@Nullable EpicenterCallback epicenterCallback); @Nullable EpicenterCallback getEpicenterCallback(); @Nullable Rect getEpicenter(); void setPropagation(@Nullable TransitionPropagation transitionPropagation); @Nullable TransitionPropagation getPropagation(); @Override String toString(); @Override Transition clone(); @NonNull String getName(); static final int MATCH_INSTANCE; static final int MATCH_NAME; static final int MATCH_ID; static final int MATCH_ITEM_ID; }### Answer:
@Test public void testIsTransitionRequired() throws Throwable { final EmptyTransition transition = new EmptyTransition(); assertThat(transition.isTransitionRequired(null, null), is(false)); final TransitionValues start = new TransitionValues(); final String propname = "android:transition:dummy"; start.values.put(propname, 1); final TransitionValues end = new TransitionValues(); end.values.put(propname, 1); assertThat(transition.isTransitionRequired(start, end), is(false)); end.values.put(propname, 2); assertThat(transition.isTransitionRequired(start, end), is(true)); }