Android 为什么将测试保存在单独的项目中而不是文件夹中?

Android 为什么将测试保存在单独的项目中而不是文件夹中?,android,unit-testing,Android,Unit Testing,只是出于兴趣-为什么决定将测试转移到单独的项目,而不仅仅是一个单独的源文件夹?我认为,通过这种方式,您可以执行两个单独的应用程序,一个是常规应用程序,另一个是测试应用程序。 如果你想发布你的应用,你不需要给每个人你的测试。但也许这样做是为了更好的目的 测试应用程序“仪器化”目标或主要应用程序 测试项目的AndroidManifest.xml中的instrumentation部分允许测试在与应用程序相同的进程中运行。此检测功能允许测试应用程序以可控的方式逐步完成android组件的生命周期 使用此

只是出于兴趣-为什么决定将测试转移到单独的项目,而不仅仅是一个单独的源文件夹?

我认为,通过这种方式,您可以执行两个单独的应用程序,一个是常规应用程序,另一个是测试应用程序。 如果你想发布你的应用,你不需要给每个人你的测试。但也许这样做是为了更好的目的

测试应用程序“仪器化”目标或主要应用程序

测试项目的AndroidManifest.xml中的instrumentation部分允许测试在与应用程序相同的进程中运行。此检测功能允许测试应用程序以可控的方式逐步完成android组件的生命周期

使用此控件可以(例如)为活动生命周期(创建、恢复、暂停、销毁)的案例创建可重复的测试

总之,额外的应用程序对测试目标具有特殊的权限。
由于这些代码被封装在测试应用程序中,您的实际应用程序只需要拥有执行其职责所需的权限。

根据我的解释,当前文档说明您应该将测试代码保存在applicaton项目=>“项目中的项目”文件夹“tests”中的单独项目中。

怎么做?

为什么?
与前40个项目相比,您有20个项目=>更好的概述,更少的维护,更快的eclipse。
Two build.xml=>更容易使用Jenkins构建CI

两个清单文件=>ADT构建工具的未来版本将支持清单合并

是这样做是为了使测试代码不构建到应用程序本身中,允许针对应用程序的最终生产版本运行测试代码,而无需增加应用程序大小,并将所有测试代码都内置在其中。哦,请注意,您可以将测试直接内置到应用程序中,这是无法阻止的。这样做没有什么好的理由,因为测试代码链接到应用程序代码,所以可以完全访问它。但android开发网站上说,“最好的方法是添加测试项目,使其根目录tests/与主应用程序项目的src/目录处于同一级别。”这意味着测试是内置在应用程序中的。不确定这是否正确,根据我的经验,测试中使用的权限必须在测试目标清单中声明(如果你问我,这是非常糟糕的)。确实,一些测试库要求目标具有额外的权限。例如,我认为Robotium过去需要权限才能查看哪些进程正在运行。我使用Robotium并同意这并不理想。然而,机器人似乎不再需要这样做。我假设,由于测试应用程序作为目标应用程序进程的一部分运行,因此它使用目标程序的权限。你能更具体地谈谈你的经历吗?我的答案是“为什么决定将测试转移到一个单独的项目”。一个简单的例子,我有应用程序a和测试项目B,它们测试应用程序a。如果我想在测试项目B中使用互联网来验证结果(我知道,这是一个糟糕的测试)但是应用程序A没有internet权限,我必须将应用程序A添加到应用程序A中,因此给生产应用程序不必要的权限是错误的。由于测试项目有自己的清单,因此最好能够在其中定义特定于测试的权限,尽管我知道在较低的级别上这将非常困难。我同意如果测试可以有额外的权限就好了。我所说的“特殊能力”是指允许测试应用程序控制和逐步执行正常(创建/启动/暂停/销毁)生命周期的仪器。