Android 浓缩咖啡&x2B;毕加索+;勺子

Android 浓缩咖啡&x2B;毕加索+;勺子,android,unit-testing,mocking,picasso,android-espresso,Android,Unit Testing,Mocking,Picasso,Android Espresso,毕加索正在使用线程在后台加载图像。即使是从资产加载,也会有一点延迟,直到它显示出来,这会导致照片不会出现在使用勺子的捕获上。我可以在测试中添加1s睡眠,但我想知道是否有更好的方法 我试图设置下载程序或请求处理程序以同步返回图像,但我认为需要设置使用主线程的执行器服务,或异步任务(以便espresso等待)。通过改造,我们可以将AsyncTask.THREAD\u POOL\u EXECUTOR与MainThreadExecutor一起使用,但我不确定如何为毕加索做到这一点 作为一种解决方法,我将

毕加索正在使用线程在后台加载图像。即使是从资产加载,也会有一点延迟,直到它显示出来,这会导致照片不会出现在使用勺子的捕获上。我可以在测试中添加1s睡眠,但我想知道是否有更好的方法

我试图设置
下载程序
请求处理程序
以同步返回图像,但我认为需要设置使用主线程的
执行器服务
,或
异步任务
(以便espresso等待)。通过改造,我们可以将
AsyncTask.THREAD\u POOL\u EXECUTOR
MainThreadExecutor
一起使用,但我不确定如何为毕加索做到这一点

作为一种解决方法,我将毕加索包装在ImageUtil中,该工具在插装期间不会使用:

DebugModule {
    @Provide
    ImageUtil imageUtil() {
        if (isTest) {
            return TestImageUtil();
        } else {
            return PicassoImageUtil();
        }
    }
}
有什么建议吗


更新:在毕加索的代码中,试图使用
执行器而不是
执行器服务,我被困在
服务上。shutdown()

我将给你一个使用浓缩咖啡等待异步任务的一般方法,因为你可以确定这会再次出现

你不应该使用线程睡眠来等待事情发生。这可能会导致片状,并导致测试效率降低。意式浓缩咖啡的设计理念是避免打电话睡觉

你也不应该强迫某些东西在主线程上,而这些东西通常不在主线程上。如果这导致ANR,您的测试可能会因为意外的对话框弹出而失败。也可能存在一个真正的bug,它只发生在多线程时,但是现在您正在强制在主线程上执行某些东西,您的测试可能会错过它

你在正确的轨道上为毕加索换了一个不同的包装进行测试。您需要的是一种在请求开始时(就在它离开主线程之前)和请求完成时挂钩的方法。交换包装器是实现这一点的一种方法

要在请求完成时获得通知,可以使用

现在您已经有了异步任务的入口点和出口点,您可以使用CountingIdlingResource来阻止测试继续进行,直到任务完成。这就像在任务开始前递增计数器,在任务完成后递减计数器一样简单


下面是一个关于如何使用该类的很好的例子:

我使用
idlingsource
进行api调用,但是
onClick
存在某种问题(再也找不到这篇文章了…)关于潜在ANR的观点非常好@eski这两个链接都是dead@BenPearson我修了毕加索的(你修了浓缩咖啡的),谢谢!