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

17 junit android unit-testing

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

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

它说:

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

然而,它说:

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

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

Lab*_*lan 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>
Run Code Online (Sandbox Code Playgroud)


Cod*_*man 5

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

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

我这样做的方法是有一个名为com..Data.Tests的包,并使用以下命令来定义我的测试:

public class AddressValidationTest extends
    ActivityInstrumentationTestCase2<InitialActivity>
Run Code Online (Sandbox Code Playgroud)

这允许您将所有内容保留在一个项目中.

希望这可以帮助!

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

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

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

<instrumentation android:label="All Tests"
    android:name="com.App.Data.Tests.MyInstrumentationTestRunner"
    android:targetPackage="com.App.UI" />
Run Code Online (Sandbox Code Playgroud)