gpt4 book ai didi

android - 如何对具有 View Animators 的 Android 代码进行单元测试?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:20 26 4
gpt4 key购买 nike

我有一个实例,其中显示和隐藏了几个按钮,具体取决于显示 ViewPager 中的哪个页面。使用 Animators 显示和隐藏。有没有办法在完成之前检查/延迟单元测试?

我正在使用 Robolectric,因为这可能是相关的。我尝试调用 Robolectric.runUiThreadTasksIncludingDelayedTasks(); 但这似乎没有解决任何问题。

动画代码如下:

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();
}

最佳答案

我认为您可以通过重新安排方法来解决这个问题。这是通过将 SimpleAnimatorListener 提取到 protected 变量,然后基于它进行单元测试。像这样的东西:

@VisibleForTesting
SimpleAnimatorListener getAnimationListener(boolean show, View view) {
return 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);
}
}

public static void regularFadeView(boolean show, View view) {
view.animate()
.setInterpolator(mDecelerateInterpolator)
.alpha(show ? 1 : 0)
.setListener(getAnimationListener(show, view))
.start();
}

然后在你的测试中:

private void shouldShowViewWhenShowIsTrue() {
View mockedView = Mockito.mock(View.class);
SimpleAnimatorListener animationListener = getAnimationListener(true, mockedView);
animationListener.onAnimationStart(null);
Mockito.verify(mockedView).setVisibility(View.VISIBLE);
}

更好的方法可能是创建一个 FadeAnimationListener,而不是像 getAnimationListener() 这样的方法,它将扩展 SimpleAnimatorListener,并将动画逻辑放在那里。

希望这对您有所帮助!

关于android - 如何对具有 View Animators 的 Android 代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com