質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

Q&A

0回答

3881閲覧

Android向けライブラリをGradle+JaCoCoでカバレッジを取得したい。

hanzo3

総合スコア8

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

0グッド

0クリップ

投稿2016/07/26 06:48

初めて記載させていただきます。どうぞよろしくお願いいたします。

###システム前提条件
・Gradle 2.13
・Androidビルドツール 23.0.2
・実機Android OS 5.0
・Gradle実行環境:Windows7 64bit
・開発環境 AndroidStudio 2.1.2

・プロジェクト構成

testProject ├─.settings ├─build │ └─jacoco │ └─testProject │ └─hoge.ahe.testProject ★ここにHTMLを出力したい ├─gen │ └─省略 └─src ├─androidTest │ └─java │ └─hoge │ └─ahe │ └─testProject ├─main │ ├─assets │ ├─java │ │ └─hoge │ │ └─ahe │ │ └─testProject │ └─res │ └─省略 └─test └─java └─hoge └─ahe └─testProject

###実現したいこと
・1)JaCoCoを使用したコードカバレッジを出力したい。
⇒ HTML形式を想定する。
・2)connectedCheckタスクを使用して、実機でUnitテストを実行し、その結果のコードカバレッジの取得を想定

###発生している問題・エラーメッセージ
1)のHTML出力について
現状、モジュール側のbuild.gradleにJaCoCoの記載をしてそれとなくHTMLは出力されているのですが、実際のテストコード部分のカバレッジが緑になりません。
AndroidUnitテストで実行した結果は、緑になるのですが、、、、

2)connectedCheckを使用した場合
以下のようなエラーが出力されます。

java.lang.IllegalStateException: JaCoCo agent not started.

エージェントを起動したいのですが、起動方法がわかりません。。。

###該当のソースコード

Gradle

1apply plugin: 'com.android.application' 2apply plugin: 'jacoco' 3 4android { 5 compileSdkVersion 23 6 buildToolsVersion "23.0.2" 7 8 lintOptions { 9 abortOnError false 10 } 11 12 compileOptions { 13 encoding "UTF-8" 14 sourceCompatibility JavaVersion.VERSION_1_7 15 targetCompatibility JavaVersion.VERSION_1_7 16 } 17 defaultConfig { 18 applicationId "hoge.ahe.testproject" 19 minSdkVersion 19 20 targetSdkVersion 23 21 versionCode 1 22 versionName "1.0" 23 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 24 } 25 26 buildTypes { 27 release { 28 minifyEnabled false 29 } 30 debug { 31 testCoverageEnabled = true 32 } 33 } 34 35 testOptions { 36 unitTests.returnDefaultValues = true 37 unitTests.all { 38 jvmArgs '-XX:MaxPermSize=256m' 39 } 40 } 41 (android.hasProperty('applicationVariants') 42 ? android.'applicationVariants' 43 : android.'libraryVariants').all { variant -> 44 45 def autoGenerated = ['**/R.class', 46 '**/R$*.class', 47 '**/Manifest*.*', 48 'android/**/*.*', 49 '**/BuildConfig.*', 50 ] 51 52 def variantName = variant.name.capitalize() 53 54 def coverageSourceDirs = [ 55 "src/androidTest/java", 56 "src/test/java", 57 "src/main/java", 58 ] 59 def coverageClassesDirs = [ 60 fileTree(dir: "build/intermediates/classes/test", excludes: autoGenerated), 61 ] 62 63 task("jacoco${variantName}Report", type: JacocoReport, 64 dependsOn: "test${variantName}UnitTest") { 65 group 'Reporting' 66 description "Generate ${variantName} Jacoco coverage reports." 67 68 reports { 69 xml.enabled = true 70 html.enabled = true 71 html { 72 destination "${buildDir}/jacoco/${project.name}" 73 } 74 } 75 76 additionalSourceDirs = files(coverageSourceDirs) 77 sourceDirectories = files(coverageSourceDirs) 78 executionData = 79 files("${buildDir}/jacoco/test${variantName}UnitTest.exec") 80 classDirectories = files(coverageClassesDirs) 81 } 82 } 83} 84 85dependencies { 86 compile 'com.android.support:appcompat-v7:23.0.1' 87 compile 'com.android.support:support-annotations:23.1.1' 88 testCompile 'junit:junit:4.12' 89 androidTestCompile 'com.android.support.test:runner:0.5' 90 androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' 91 92}

テストコード

Java

1package hoge.ahe.testpackage; 2 3import static org.hamcrest.CoreMatchers.*; 4 5import org.junit.After; 6import org.junit.Before; 7import org.junit.Test; 8 9import android.test.ActivityInstrumentationTestCase2; 10 11public class SampleTest extends ActivityInstrumentationTestCase2<TestActivity> { 12 13 public SampleTest() { 14 super(TestActivity.class); 15 } 16 17 @Before 18 public void setUp() throws Exception { 19} 20 21 @Test 22 public void add() { 23 assertThat(8, is(8)); 24 } 25 26 @Test 27 public void testString() { 28 assertThat("AndroidTestSample", is("AndroidTestSample")); 29 } 30 31 @After 32 public void tearDown() throws Exception { 33 super.tearDown(); 34 } 35 36} 37

###試したこと
・RunWith(AndroidJUnit4.class)のJUnit4に対応させた形にしたら、AndroidTestでInitializationErrorが発生。
⇒ JUnit3形式にする。
・実機接続しない形でJaCoCoのレポート出力『gradle jacocoDebugReport』実行
⇒ setUpメソッドと、tearDownメソッドしか実行されない。
⇒ @Testやメソッド名「test~~~()」にしてもNG

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問