好吧,所以我花了3天时间梳理网络,试图找出如何使用命令行中的ant运行一些单元测试来进行我的eclipse项目。
我可以通过“Run As”在Eclipse中运行测试 - > “Android JUnit测试”
我现在想要的是能够通过命令行运行测试。就是这样。
我似乎找不到任何关于2010年没有编写的指南,但是试图遵循它们但是我已经安装了ant并在我的项目中创建了一个build.xml文件,我复制了面食来自导游。因为我只能猜测构建文件中发生了什么(以前从未使用过ant),当问题出现时,我的头脑很难看,我就是SOL。
目前,当我尝试运行它时,它说“package android.app不存在”(我正在使用Activity类),对于我已经包含在项目的“/ libs”中的库jar文件也一样“文件夹。
似乎很清楚,在某个地方我错过了一些路径声明,但我尝试的任何东西似乎都没有用。
编辑(添加代码): 这是MockTester.java -
package com.android.mocksdktester;
import static org.junit.Assert.*;
import android.app.Activity;
import android.test.AndroidTestCase;
import com.mock.android.lib.*;
public class MockTester extends AndroidTestCase
{
Activity mActivity;
MockFeature mFeature;
public MockTester()
{
}
public void testExists()
{
String test = null;
assertNull(test);
}
}
正如你所看到的,不是很多。 这是我得到的build.xml文件,正如我所提到的,我只能猜测它正在做什么。
<?xml version="1.0"?>
<!-- to save as "build.xml" -->
<project name="Mock Unit Tests" default="run" basedir=".">
<path id="junit_classpath">
<pathelement location="C:\eclipse\plugins\org.junit_4.8.2.v4_8_2_v20110321-1705\junit.jar"/>
</path>
<!-- Library Project Here -->
<fileset dir="libs" includes="*.jar"/>
<!-- build all classes in this directory -->
<!-- To run this: use "ant build" -->
<!-- need to include junit.jar in the classpath -->
<target name="build">
<javac srcdir="${basedir}"/>
<echo message="Build done" />
</target>
<!-- Test and build all files -->
<!-- To run this: use "ant" (default) or "ant run" -->
<target name="run" depends="build">
<java taskname="Test" classname="MockTester" fork="true" failonerror="true" />
<echo message="Unit Tests done" />
</target>
<!-- delete all class files -->
<!-- To run this: use "ant clean" -->
<target name="clean">
<delete>
<fileset dir="${basedir}" includes="*.class" />
</delete>
<echo message="clean done" />
</target>
</project>
有人抱怨过去没有看过junit,但我设法解决了这个问题。我只是不确定当它缺少与Android相关的类以及项目中包含的jar文件时该怎么做(虽然我读过这是一个错误)。
错误:
build:
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\build.xml:16: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 3 source files
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\src\com\android\mocksdktester\MockTester.java:14:error: package android.app does not exist
[javac] import android.app.Activity;
[javac] ^
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\src\com\android\mocksdktester\MockTester.java:15:error: package android.test does not exist
[javac] import android.test.AndroidTestCase;
[javac] ^
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\src\com\android\mocksdktester\MockTester.java:18:error: package com.mock.android.lib does not exist
[javac] import com.mock.android.lib.*;
[javac] ^
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\src\com\android\mocksdktester\MockTester.java:20:error: cannot find symbol
[javac] public class MockTester extends AndroidTestCase
[javac] ^
[javac] symbol: class AndroidTestCase
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\src\com\android\mocksdktester\MockTester.java:22:error: cannot find symbol
[javac] Activity mActivity;
[javac] ^
[javac] symbol: class Activity
[javac] location: class MockTester
[javac] C:\<my workspace>\mock\mock_sdk_android\trunk\source\MockSDKTest\src\com\android\mocksdktester\MockTester.java:23:error: cannot find symbol
[javac] MockFeature mFeature;
[javac] ^
[javac] symbol: class MockFeature
[javac] location: class MockTester
[javac] 6 errors
BUILD FAILED
由于
答案 0 :(得分:0)
没有解释你做了什么或失败了什么?你的项目是如何组织的?
Ant使用<junit>
任务来执行JUnit测试。您必须确保在<junit>
类路径中有JUnit jar。
通常情况下,这是一个两步过程:
<junit>
以执行测试。 formatter
将指定您希望如何格式化测试。您可以创建XML输出,然后对其运行XSLT转换。运行<junit>
测试时,使用<test>
或<batchtest>
子任务执行<junit>
任务以实际运行测试,然后使用{{ 1}}为可读输出格式化测试。
我没有构建Android应用,但这是我的Junit测试样本:
<formatter>
<property name="target.dir" value="${basedir}/target"/>
<property name="main.destdir" value="${target.dir}/classes"/>
<property name="test.srcdir" value="${basedir}/src/test/java"/>
<property name="test.destdir" value="${target.dir}/test-classes"/>
<!-- Path for all jars required for compiling your actual source -->
<path id="main.classpath">
<fileset dir="${basedir}/lib"/>
<path>
<!-- Includes JUnit.jar and the main.classpath jars too -->
<path id="test.classpath">
<fileset dir="${basedir}/test-lib"/>
<fileset dir="${basedir}/lib"/>
</path>
<mkdir dir="${test.destdir}"/>
<!-- Compile tests -->
<javac destdir="${test.destdir}"
fork="false"/>
<src path="${test.srcdir}"/>
<classpath refid="test.classpath"/>
<classpath refid="${main.destdir}"/>
答案 1 :(得分:0)
感谢大卫的帮助。我实际上决定放弃尝试使用ant,因为我真的想通过命令行运行单元测试,这可以使用adb shell中的am instrument
命令完成(我通过浏览器找到了dev docs agian)。
所以,我不确定我在这里做的是正确的,因为虽然我找到了我真正想要的答案,但这不是我问的问题的答案,这就是如何运行通过命令行通过ant 进行测试。
我的特定命令如下所示:adb shell am instrument -w com.android.mocksdktester.test/andro
id.test.InstrumentationTestRunner
在我开始工作之前,我有几个陷阱。
您需要确保在测试工作之前,您正在测试和测试应用程序安装的应用程序。
我从命令行创建了http://developer.android.com/tools/testing/testing_otheride.html之后的测试项目,然后将项目导入到eclipse中。我看到包名称与我试图测试的应用程序包相同,我认为这是错误的所以我将其更改为其他内容,并且它已经破坏了。所以,不要那样做:P(除非你知道如何更改它而不是破坏它)。
我试图运行adb shell am instrument -w com.android.mocksdktester/andro
id.test.InstrumentationTestRunner
的时间最长。我在包名的末尾没有.test
,而且据我所知,没有迹象表明我需要它。文档说"The Android package name of the test package."
是com.android.mocksdktester
。我想到将.test
添加到其末尾的唯一原因是因为我从一个不同的问题中找到了命令adb shell pm list instrumentation
,我认为它列出了当前在您的模拟器/设备上的所有检测包,列表中的一个项目是
instrumentation:com.android.mocksdktester.test / android.test.InstrumentationTestRunner(target = com.android.mocksdktester)。