2

我正在尝试使用 Robolectric 来验证 Lottie 动画是否正在播放。

ExampleUnitTest.java:

@Test
public void lottie_isAnimating() {
    MainActivity activity = Robolectric.setupActivity(MainActivity.class);

    LottieAnimationView lottieAnimationView = (LottieAnimationView) activity.findViewById(R.id.lottieanimation);

    assertTrue(lottieAnimationView.isAnimating()); // fails here
}

这行不通。但是,我知道动画确实会运行,因为我可以看到它正在运行,并且我添加的 AnimatorListener 表示如下:

MainActivity.java:

lottieAnimationView.addAnimatorListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        Log.d(TAG, "onAnimationStart():  lottieAnimationView.isAnimating() = " + lottieAnimationView.isAnimating());
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        Log.d(TAG, "onAnimationEnd():  lottieAnimationView.isAnimating() = " + lottieAnimationView.isAnimating());
    }

    @Override
    public void onAnimationCancel(Animator animation) {
        Log.d(TAG, "onAnimationCancel():  lottieAnimationView.isAnimating() = " + lottieAnimationView.isAnimating());
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
        Log.d(TAG, "onAnimationRepeat():  lottieAnimationView.isAnimating() = " + lottieAnimationView.isAnimating());
    }
});

日志输出显示:

D/com.wuziq.lottierobolectrictest.MainActivity: onAnimationStart():  lottieAnimationView.isAnimating() = true
D/com.wuziq.lottierobolectrictest.MainActivity: onAnimationUpdate():  lottieAnimationView.isAnimating() = true
...
D/com.wuziq.lottierobolectrictest.MainActivity: onAnimationRepeat():  lottieAnimationView.isAnimating() = true
...
D/com.wuziq.lottierobolectrictest.MainActivity: onAnimationEnd():  lottieAnimationView.isAnimating() = true

我不清楚为什么 onAnimationEnd() 被调用,但我不会在任何地方停止动画。我将其视为 Robolectric 如何对待动画师的副作用,但我想了解这一点。

在我的测试中,我可以简单地向 LottieAnimationView 添加一个 AnimationListener 并断言 onAnimationStart() 和 onAnimationRepeat() 被调用,但这似乎是一个 hacky 解决方法。

测试这个的正确方法是什么?我觉得我错过了一些非常明显的东西..

示例位于https://github.com/wuziq/LottieRobolectricTest

4

0 回答 0