androidunit-testingrobolectricobjectanimator

How do I unit test Android code that has View Animators?


I have an instance where a couple buttons are shown and hidden depending on which page in a ViewPager is being shown. The are shown and hidden with Animators. Is there a way to check for/delay unit testing until this has been completed?

I'm using Robolectric since that's probably relevant. I tried calling Robolectric.runUiThreadTasksIncludingDelayedTasks(); but this didn't seem to fix anything.

The animation code is as follows:

public static void regularFadeView(final boolean show, final View view) {
    view.animate()
            .setInterpolator(mDecelerateInterpolator)
            .alpha(show ? 1 : 0)
            .setListener(new SimpleAnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
                    if (show) view.setVisibility(View.VISIBLE);
                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    if (!show) view.setVisibility(View.INVISIBLE);
                }
            })
            .start();
}

Solution

  • I ended up creating an AnimationUtility interface and a real and fake implementations. The fake implementation immediately set the view to visible/hidden instead of doing the animation. I dynamically inject the real/fake one depending on the proper context.