0

了解しました。3日間、ネットを組み合わせて、Eclipseプロジェクトのコマンドラインからantを使用してユニットテストを実行する方法を見つけました。

「実行」->「AndroidJUnitテスト」を介してEclipseでテストを実行できます

私が今欲しいのは、コマンドラインを介してテストを実行できるようにすることです。それでおしまい。

2010年に書かれなかったガイドは見つからないようですが、それでも、antをインストールして、プロジェクト内にコピーパスタしたbuild.xmlファイルを作成するまでは、ガイドをフォローしようとしています。ガイド。ビルドファイルで何が起こっているかを推測することしかできないので(これまでantで作業したことはありません)、問題がその醜い頭を抱えているとき、私はほとんどSOLです。

現在、実行しようとすると、「パッケージ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

ありがとう

4

2 に答える 2

0

あなたが何をしたか、何が失敗したかについての説明はありませんか?あなたのプロジェクトはどのように構成されていますか?

Ant は<junit>タスクを使用して JUnit テストを実行します。<junit>クラスパスに JUnit jar があることを確認する必要があります。

通常、これは 2 段階のプロセスです。

  • 単体テストをコンパイルします。
  • 実行<junit>してテストを実行します。はformatter、テストをフォーマットする方法を指定します。XML 出力を作成し、それに対して XSLT 変換を実行できます。

<junit>テストを実行するときは、<test>または<batchtest>サブタスクをタスクに使用<junit>して実際にテストを実行してから、 を使用<formatter>して、読みやすい出力用にテストをフォーマットします。

私は Android アプリを作成していませんが、Junit テストのサンプルを次に示します。

<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}"/>

<!-- Execute all classfiles you've compiled in test-classes directory -->
<junit fork="true"
    maxmemory="128m"
    includeAntRuntime="true">
    <classpath>
        <pathelement path="${main.destdir}"/>
        <pathelement path="${test.destdir}"/>
    </classpath>
    <classpath refid="test.classpath"/>
    <formatter type="plain"/>
    <batchtest
        todir="${junit.batchtest.todir}">
        <fileset dir="${test.destdir}"/>
    </batchtest>
</junit>
于 2012-10-16T01:28:31.117 に答える
0

助けてくれてありがとう、デビッド。コマンドラインを介して単体テストを実行したかったので、実際にantの使用をam instrumentやめることにしました。これは、adbシェルのコマンドを使用して実行できます(android dev docs agianを調べて見つけました)。

したがって、ここで正しいことを行っているかどうかはよくわかりません。なぜなら、私が本当に望んでいたことへの答えを見つけたものの、コマンドを介してテストを実行する方法という、私が尋ねた質問に対する正確な答えではないからです。ラインスルーアリ

私の特定のコマンドは次のようになります。adb shell am instrument -w com.android.mocksdktester.test/andro id.test.InstrumentationTestRunner

これを機能させる前に、いくつかの落とし穴がありました。

  1. テストが機能する前に、テストするアプリケーションとテスト アプリケーションの両方がエミュレータ/デバイスにインストールされていることを確認する必要があります。

  2. コマンドラインからhttp://developer.android.com/tools/testing/testing_otheride.htmlに従ってテストプロジェクトを作成し、プロジェクトをEclipseにインポートしました。パッケージ名がテストしようとしていたアプリケーションのパッケージと同じであることがわかり、それは間違っていると思ったので別のものに変更したところ、壊れました。だから、それをしないでください:P (あなたがそれを壊さずに変更する方法を知っていない限り)。

  3. 長い間、私は走ろうとしていました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コマンドを見つけたからです。リスト内の項目の1つはadb shell pm list instrumentation

    インストルメンテーション: com.android.mocksdktester.test/android.test.InstrumentationTestRunner (ターゲット = com.android.mocksdktester)。

于 2012-10-17T17:06:18.940 に答える