4

テスト対象のアプリを反映するようにパッケージの名前を変更するスクリプトを使用して、独自の「テスト プロジェクト」を提供するcalabash-androidを使用して Android アプリケーションをテストし、InstrumentationTestRunner サブクラスを使用します。

adb shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{ENV['TEST_PACKAGE_NAME']}/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner

Android アプリの Emma や Cobertura に似たコード カバレッジ レポートを生成できる回答であれば、calabash-android でのテスト中に収集されたデータを使用できます。

エマを働かせようとして、私は...

  • これらの指示に従って、Maven にプロジェクトをビルドさせようとしました (ant を使用してから時間が経ちすぎたため)。にcoverage.emファイルが生成されます。target/emma
  • -e coverage true" "を追加して、calabash-android スクリプトを変更しました。
  • calabash-android を実行すると、最終的に「生成されたカバレッジ データを /data/data/my.project/files/coverage.ec に」と表示されます。
  • adb -e pull /data/data/my.project/files/coverage.ec coverage.ec

...だから今、私は実行できるはずです:

  • java -cp $ANDROID_HOME/tools/lib/emma.jar emma report -r html -in target/emma/coverage.em,coverage.ec

しかし、私はエラーが発生します:

EMMA: processing input files...
java.io.UTFDataFormatException: malformed input around byte 107

...だから、 Android maven pluginに何か問題があると思い、ファイルを生成する方法を見つけようとしていcoverage.emます。android update project -p ." " と " ant emma" と " "を実行しましたant emma debugが、coverage.em がどこにも見つかりません...

...生成されたbuild.xmlファイルは、「ant emma test」を実行したときにのみcoverage.emファイルの生成が生成されることを暗示しているようですが、テストアプリはによって制御されているため、うまくいかないと思いますひょうたんアンドロイド。

Coberturaを機能させるために、私は...

  • さまざまな形式の「cobertura android」をグーグル検索しましたが、運が良かった人はいないようです。
  • クラスを計測するために Maven pom ファイルで cobertura プロファイルを構成しようとしましたが、(Maven 3 で)
    • 「InnerClasses」属性を持つlog4jとantに関する警告の山全体と、ソースからそれらを再コンパイルする必要があること
    • com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.3.0:dex "ANDROID-040-001: Could not execute: Command = /bin/sh -c -cd /path/ というエラーto/myproject && java -jar $ANDOID_HOME/platform-tools/lib/dx.jar --dex ..."

EXCEPTION FROM SIMULATION:
local variable type mismatch: attempt to set or access a value of type 
java.lang.Class using a local variable of type java.lang.reflect.Type[].  
This is symptomatic of .class transformation tools that ignore local variable information.

... これがおそらく誰も cobertura を Android で動作させることができなかった理由ですか?

4

1 に答える 1

5

The problem is that maven-android-plugin uses version 2.1.5320 of emma, whereas the Android tools use version 2.0.5312. As discussed here, those two versions are incompatible.

The fix is to only use a single version across the two tools. I've been able to get it to work by cloning the maven-android-plugin repo, setting the emma dependency version back to 2.0.5312, and installing it to my local repository. Make sure the emma dependency in your under-test project is also correct, and then you should be able to generate a coverage.

The alternative is to make sure all of the tools are using the newest version. I haven't tested it, but it might work if you do the report generation from maven is the version will be the same then. You could also download the newest version of emma and generate the report using the jar from that package.

于 2012-08-24T09:26:37.333 に答える