在单独的项目中创建单元测试正确的Android方法吗?

时间:2011-07-28 13:34:18

标签: android unit-testing junit

如何开始在Android中进行测试的说明似乎不一致:

http://developer.android.com/guide/topics/testing/testing_android.html

它说:

  

测试项目是您在其中创建的目录或Eclipse项目   测试包的源代码,清单文件和其他文件。   Android SDK包含带有ADT和Eclipse的Eclipse工具   命令行,为您创建和更新测试项目。工具   创建用于源代码和资源的目录   测试包的清单文件。

然而,它说:

  

您可以在文件系统的任何位置创建测试项目,但是   最好的方法是添加测试项目以使其根目录   tests /与main的src /目录处于同一级别   应用程序的项目。这有助于您找到与之相关的测试   申请。

然后它显示了一个项目结构,其中所有测试都在您的主项目下,而不是单独的项目。但是,如果您使用ADT插件,它将创建一个单独的项目。哪个是正确的,或者是最佳实践 - 单元测试的单独项目,还是同一个项目?

3 个答案:

答案 0 :(得分:7)

  

在单独的项目中创建单元测试的正确方法   Android的?

我的意见,是的,这是最好的方法 如果使用相同的项目,manifest中会有一些额外的代码,您需要在src中添加额外的类。
如果您创建一个单独的项目,它将不会影响我们的主项目代码 通过功能方式,两者都将以相同的方式工作 那么为什么要混淆:)

编辑:要使用相同的项目,您需要在清单文件中添加以下内容

<manifest>
    <!-- For doing JUnit test--->
    <instrumentation
        android:targetPackage="com.your.package.where.testclasses"
        android:name="android.test.InstrumentationTestRunner" />
        <application ...>
            <activity..>
            <!-- For doing JUnit test -->
            <uses-library android:name="android.test.runner" />
        </application>
</manifest>

答案 1 :(得分:5)

可以在单独的项目中创建单元测试,但我完成它的方式只是使用不同的包。

这允许您在创建断言字段时轻松引用您可能需要的任何类。

我这样做有一个名为com..Data.Tests的包,并使用以下内容来定义我的测试:

public class AddressValidationTest extends
    ActivityInstrumentationTestCase2<InitialActivity>

这使您可以将所有内容保留在一个项目中。

希望这有帮助!

编辑:您的混淆可能来自项目与包与类之间的Java术语。我认为在这种情况下,当他们说“项目”时,他们指的是一个能够进行单元测试的独立课程。

EDIT2: 您不应该需要多个清单 在清单中包含以下任何测试活动:

<uses-library android:name="android.test.runner" />  

<instrumentation android:label="All Tests"
    android:name="com.App.Data.Tests.MyInstrumentationTestRunner"
    android:targetPackage="com.App.UI" />

答案 2 :(得分:1)

在我看来,为测试用例创建单独的项目是很好的。 特别是如果您的项目需要早期版本的JRE。对于Android项目,这可能不适用,但适用于需要较旧JRE的嵌入式Java项目。

由于大多数测试框架至少需要JDK 1.5或更高版本,因此为测试类创建单独的项目是唯一的解决方案。