Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android测试-应用程序实例间的状态持久化导致的问题_Android_Testing - Fatal编程技术网

Android测试-应用程序实例间的状态持久化导致的问题

Android测试-应用程序实例间的状态持久化导致的问题,android,testing,Android,Testing,运行android连接的设备测试时,跨应用程序实例持续存在的状态(如应用程序存储的权限和文件)会导致测试相互干扰 例如,如果我想在拒绝运行时权限时编写一个应用程序行为测试,在允许运行时权限时编写另一个应用程序行为测试,那么我必须非常小心,确保测试以正确的顺序运行。如果允许测试在拒绝测试之前运行,那么拒绝测试将失败,因为权限设置已经被授予 另一个示例是,在购物应用程序中,应用程序可以将购物篮的内容存储在应用程序内部文件存储中,以允许购物篮在应用程序终止和重新启动后继续存在。测试购物篮的行为变得非常

运行android连接的设备测试时,跨应用程序实例持续存在的状态(如应用程序存储的权限和文件)会导致测试相互干扰

例如,如果我想在拒绝运行时权限时编写一个应用程序行为测试,在允许运行时权限时编写另一个应用程序行为测试,那么我必须非常小心,确保测试以正确的顺序运行。如果允许测试在拒绝测试之前运行,那么拒绝测试将失败,因为权限设置已经被授予

另一个示例是,在购物应用程序中,应用程序可以将购物篮的内容存储在应用程序内部文件存储中,以允许购物篮在应用程序终止和重新启动后继续存在。测试购物篮的行为变得非常困难,因为测试相互干扰


这个问题的解决方案是什么?

模拟状态/为测试注入特殊状态对象是大多数问题的解决方案,但不是运行时权限情况

  • 确保在每个测试用例之后清除状态。依赖于运行顺序的测试被认为是一种不好的做法。在许多情况下,您可以实现一个
    teardown()
    方法(如果您使用的是JUnit4,则使用
    @postest
    进行注释)来进行清理

  • 在测试期间创建可注入应用程序的模拟状态对象。我对这种特殊的方法还是新手,所以我这里没有很多建议。谷歌搜索应该可以帮助你开始


  • 在测试活动时,提供模拟对象也很困难。Android强制活动具有默认构造函数,这意味着依赖项更难注入。在购物篮示例中,每个应用程序只需要该对象的一个实例。因此,您可能有一些静态方法来检索该对象(可能是从自定义应用程序类)。因为它是静态的,所以如果没有PowerMock之类的东西,就不能对它进行模拟。@B4Z不要使它成为静态的。e、 g.Dagger2提供了在不实际使用静态方法或单例的情况下拥有对象的“单例”实例的解决方案。您只需小心处理dependencieshi,我想让您注意这个问题,您的帮助将非常感激拆卸将适用于大多数事情,但有没有办法删除授予的权限?@B4Z如何授予权限?你说的是清单中的
    吗?我的清单中确实有一个,但在Android 6.0中,权限是在运行时授予的。因此,我的应用程序会弹出一个对话框,要求用户允许/拒绝该权限。@B4Z我找不到有关撤消已授予的权限的任何信息。一种可能的解决方法是将测试分组(可能使用注释),然后分别运行每个组,并确保在每次组运行之间完全卸载应用程序。在某些情况下可以完成测试排序,但在其他情况下,我不相信这能做到。例如,如果测试在不同的类中,我认为不可能指定顺序。