4

为了为我的应用程序编写一些测试,我偶然发现了Android 测试页面。经过相当长的阅读后,我很快就发现我唯一能从中得到的就是关于如何测试 UI/Activity 的信息。我真正想要的是简单地测试我的逻辑的方法ant test,最好甚至不涉及设备。在这个阶段我应该提一下,我没有使用 Eclipse,而且令人遗憾的是,Android 上 99% 的 Java 资源都假设人们会这样做。

无论如何,为了让任何东西都运行起来,我尽可能多地按照教程进行操作。它要求tests在与src. 当然,即使他们的其他页面都暗示测试项目是一个完全独立的实体。在顶级项目目录中,我运行了 android create test-project -m /path/to/my/project/ -n MyProjectTest -p tests. 值得一提的是,他们与在这个问题上看到的他们希望如何设置事物不一致。访问该目录,我发现了默认的测试文件。这是问题开始的地方。

据我了解,测试如下:构建应用程序,安装;去测试,构建测试,安装;使用从测试目录运行测试ant test或直接使用启动它们adb shell am instrument。这工作得很好。但是,我不想测试活动,而只是测试逻辑(不访问任何视图/活动)。

将默认测试更改为扩展AndroidTestClass似乎有一段时间了。测试正在运行,但有一些警告:清理tests项目目录ant clean../testsant debug

再做几次测试,我就java.lang.VerifyError上了我唯一的测试课。谷歌搜索和堆叠,它归结为外部库有问题或我的类路径有问题。我没有使用任何 external .jars 所以这可能是我的路径。

无论如何,这是我的问题:使用 JUnit 在 Android 应用程序中对逻辑进行单元测试的正确方法是什么?我根本找不到与此相关的任何资源:所有资源要么用于测试 UI 部分,要么用于对普通应用程序进行单元测试。

如何仅对我的逻辑进行单元测试?考虑到我不需要使用 Android 的任何部分,这甚至不需要设备运行。我在哪里进行测试?我需要更改什么以便ant test在我的项目目录中运行然后运行这些?

4

2 回答 2

2

很长一段时间后,我设法做到了。

首先,我忽略了任何使用adb.

想象一下我的包叫做com.foo.bar. 我testssrc/com/foo/bar/tests. 在那里,编写您的常规 JUnit 测试。确保您package com.foo.bar.tests参加了测试课程。这是一个示例类:

package com.foo.bar.tests;

import com.foo.bar.baz.Foo;

import org.junit.*;
import junit.framework.*;
import static org.junit.Assert.*;


public class MyTests extends TestCase {

    public void testSomething() {
        Foo testFoo= new Foo();
        assertEqual(testFoo.getBar(), 1);
    }
}

接下来是使用ant test. 为此,请AndroidManifest.xml在最后一个右括号 ( ) 之前添加以下内容</manifest>

<instrumentation android:name="android.test.InstrumentationTestRunner"
                 android:targetPackage="com.foo.bar"
                 android:label="Tests for com.foo.bar"/>

你还需要

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

添加到您的<application>部分。

我不知道需要更改哪些内容才能在本地而不是在设备上进行测试,但这是 75% 的答案,希望将来对像我这样的人有所帮助。

ant test编辑:可以通过在最后一个导入下方添加以下内容来隐藏原始行为build.xml

   <target name="test" >
       <junit>
           <!-- all your junit stuff here -->
       </junit>
   </target>
于 2013-04-03T02:06:43.500 回答
1

查看Robolectric——它可以让您避免 Google 的测试解决方案的大部分噩梦。

Square 的一篇关于该主题的好文章:Android 测试的复活

于 2013-04-04T01:29:09.020 回答