作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个实例,其中显示和隐藏了几个按钮,具体取决于显示 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/
我是一名优秀的程序员,十分优秀!