我正在为Android代码编写一些测试,这些测试执行业务逻辑并通过Sprinkles库触发异步数据库操作。当他们期望某些数据存在于db中时,我的测试基本上是失败的,但是由于异步写入尚未完成而导致数据丢失。因此,出于测试目的,似乎我需要一种方法来等待异步作业在我做断言之前完成。
在看了Sprinkles如何进行异步写操作之后,它只是触发了一个新的AsyncTask。但这些AsyncTasks完全由Sprinkles处理,因此我无法访问它们。所以我想知道:有没有办法掌握我的应用程序启动的所有正在进行的AsyncTasks?如果有,那么我可以让我的测试等待所有AsyncTasks完成。不是一个很好的解决方案,但它可以解决问题。
否则,是否有人有任何关于如何解决这个问题的提示?
非常感谢!
答案 0 :(得分:1)
您可以使用
Map<Thread, StackTraceElement[]> m = Thread.getAllStackTraces();
然后遍历每个堆栈跟踪并查找异步任务并查看它们是否在
中doInBackground
方法
答案 1 :(得分:0)
我必须做类似的事情,我决定保留布尔变量来表示它们是否已经完成。并检查每个异步任务的OnPostExecute方法,如果所有异步任务都已完成,并且所有方法都设置了表示该异步的布尔变量。