gpt4 book ai didi

android - 如何使用 Robolectric 测试异步代码

转载 作者:太空狗 更新时间:2023-10-29 16:38:22 26 4
gpt4 key购买 nike

我有一个 Activity,它在 Horizo​​ntalScrollView 中向用户显示产品列表。我正在使用 Robolectric 来测试当产品列表很长时 ScrollView 是否显示箭头。

在我的 Activity 中,我注册了一个 OnGlobalLayoutListener,如下所示:

ViewTreeObserver vto = productsScrollView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
productsScrollView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
maxScrollX = productsScrollView.getChildAt(0)
.getMeasuredWidth() - productsScrollView.getMeasuredWidth();

hideShowArrowsAsNeeded();
}
});

此监听器在 productsScrollView View 层次结构发生更改时调用(即,我向其中添加了一些 subview )。我运行该应用程序并且一切正常。

问题是我不知道如何测试 hideShowArrowsAsNeeded 方法是否正常工作。在我的 Robolectric 测试中,我有这个:

@Test
public void testThatAHugeNumberOfProductsShowRightArrow() throws Exception {
Product product1 = new Product();
product1.setName("Product1");
Product product2 = new Product();
product2.setName("Product2");
...

ArrayList<Product> productsList = new ArrayList<Product>();
productsList.add(product1);
productsList.add(product2);
...
activity.drawProducts(productsList); // Here I add the views to the scroll view and onGlobalLayout is eventually called, but now right away

assertThat(rightArrow.getVisibility(), equalTo(View.VISIBLE));
}

当然测试失败了,因为在执行assertThat方法时onGlobalLayout没有机会运行。

有什么想法吗?

最佳答案

试试这个:

shadowOf(view.getViewTreeObserver()).fireOnGlobalLayoutListeners();

关于android - 如何使用 Robolectric 测试异步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593305/

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