(4) Android 網羅的単体テスト編　SonarCloud　（コード品質分析）

(1) Android 網羅的単体テスト編（Android開発者テスト） -> ![Screen Shot 2020-08-15 at 17.31.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/bd6e1aca-cd04-0786-6389-924dd51c5458.png)
https://qiita.com/hal319/items/a8b1d52ac0cfb36f4cee
(2) 網羅率測定 （Android開発者テスト）-> https://qiita.com/hal319/items/5bf3f7c8c3c577ac616f
(3) github・CircleCI統合 クラウド編（Android開発者テスト） https://qiita.com/halsuguro/items/51eca80ce44bdc18d927
(4) SonarCloud （Android開発者テスト）

網羅率をCircle CI上で測定できるようになったら、コードの品質をクラウドで見ましょう。

SonarCloudというツールがあります、その使い方。

![Screen Shot 2020-08-15 at 17.09.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/5349a325-c580-571e-9452-b02ad0785433.png)

まずgithubから解析したりリポジトリーを選択。
ビルドツールを選択、当然前回からセットアップしたCircleCIを選択。
![Screen Shot 2020-08-15 at 17.10.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/ce79cc2c-5467-a21a-667d-db34b6d9823c.png)

つぎにいくつかのちょいメンドウなおまじないを、設定。
　
![Screen Shot 2020-08-15 at 17.12.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/83c7a25b-6a7f-5223-2c3c-99983a3a62ae.png)

Click here to create a CircleCI context named SonarCloud.で"here"を押す。

![Screen Shot 2020-08-15 at 17.15.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/2ccd0b57-1fd4-96e8-706c-f78cab97c373.png)

こんな画面が出てくるので、迷わず"Create Context"を押す。

![Screen Shot 2020-08-15 at 17.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/8193398a-733d-1164-de21-6fd9c5ffa98e.png)

Context nameに"SonarCloud"を入力

![Screen Shot 2020-08-15 at 17.30.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/4321d846-8979-1a46-6289-ebb7da0c0526.png)


![Screen Shot 2020-08-15 at 17.38.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/bf0079ed-7a9c-354d-3c32-2ecc173c649e.png)
Add Environment Variableを押して、
![Screen Shot 2020-08-15 at 17.39.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/82899791-29af-a531-ddcc-df1aa3def8fc.png)
先にあった、Valueの値をコピペ
![Screen Shot 2020-08-15 at 17.41.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/410a20ed-21e9-b5c2-d4d2-a8f6d25ca315.png)
次のstepで、configy.ymlの入れるべきコードが出てくる。
![Screen Shot 2020-08-15 at 17.42.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/ef9e60db-b234-5422-3cfe-81c02cbf37c2.png)
まあこれ通り入れればうまく動くはず。ちなみにbuild.gradleは

```
plugins {
    id "org.sonarqube" version "3.0"
}


sonarqube {
    properties {
        property "sonar.projectKey", "halsuguro_simple_unit2_mvc"
        property "sonar.organization", "halsuguro"
        property "sonar.host.url", "https://sonarcloud.io"
    }
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId "com.example.empty"
        minSdkVersion 28
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        testInstrumentationRunnerArguments clearPackageData: 'true'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            testCoverageEnabled true
        }
    }

    testOptions {
        animationsDisabled true

        unitTests {
            returnDefaultValues true
            includeAndroidResources true
        }
    }
}



dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0'
    androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
}

apply from: 'jacoco.gradle'
```

config.ymlはこんな感じで、build時間がかかるので、jacoco等々の記述は外してある。

```

version: 2.1
jobs:
  build:
    working_directory: ~/code
    docker:
      - image: 'circleci/android:api-28'
      - image: 'circleci/openjdk:11-jdk'

    steps:
      - checkout
      - run:
          name: Analyze on SonarCloud
          command: ./gradlew build sonarqube


workflows:
  main:
    jobs:
      - build:
          context: SonarCloud
```

そうすると、いろいろなコードの指標を出してくれる、それもビルドごとに。Cyclomaticの複雑度なんかも、見たいときにすぐ見れる。ステキ！

![Screen Shot 2020-08-15 at 18.07.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680371/4c03c8dd-dfac-f92d-7ae3-4a54a9fc91b0.png)