エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

2021/10/04週 気づきと振り返り covarageで悩まされた

業務こなしての問題・気づき

なし。テストするだけなので、新規の発見をするのは、かなり難しい。

趣味開発での問題・気づき

sonarcloud

covarage計測

プルリクを何度か出して解析していたら、とうとうcovarageに引っかかることに。。。
今までは行数自体が少なかったから引っかからなかったけど、大型機能の追加したら、引っかかってしまった。。。

回避方法を考えたが、どうせ後々対応するのなら、今のうちに入れてしまおうと思い、ユニットテストを追加した。
ユニットテスト追加すれば突破できると思っていたが、テスト結果のレポートを取り込まないとcovarage計測がsonarに連携されないことに気づき、結構悩んだ。

対応としては、jacocoのレポート出力機能を利用して、sonarカバレッジ情報を連携するようにした。

jacocoとsonarcloudの連携方法

自分は、下記の方法で連携するようにした。

plugins {
// 省略
    id 'jacoco'
}

// 省略

sonarqube {
    properties {

// 省略

        // jacocoのレポート出力先
        property "sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco/test/jacocoTestReport.xml"
    }
}

// 省略

test {
    finalizedBy jacocoTestReport // report is always generated after tests run
}

jacoco {
    toolVersion = "0.8.7" // これはコピペしてきただけなので、検討の必要性あり
}

jacocoTestReport {
    dependsOn test // tests are required to run before generating the report
    reports {
        xml.required = true
        csv.required = false
        html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
    }
}

大事なのは、xml.required = trueの設定をすること。
これが有効になってないと、連携用のxmlが出力されない。
上記設定でgradle testを実行すると、build/reports/jacoco/test/jacocoTestReport.xml が出力される。

ユニットテスト

TestMeを使ったテストケースの自動生成

sonarcloudのカバレッジ計測で少しでも楽しようと思い、ユニットテストの自動生成について調べていた。
100%自動生成するのは無理だと分かったときは、絶望した!

IntelliJプラグインで、TestMeがよさげだったので、利用することに決定。
開発はIntelliJでやっていたので、敷居が低そうだったってのもある。

Mockitoは、以前利用していたので、難なく利用できた。
JUnit5+Mockitoでユニットテストを生成した。

生成されたテストケースは、カバレッジが高くなるようなケースが自動生成されるようだった。
追加で必要だったのは、期待値の記述だけ。
あと、モックの設定くらい。

使っていて思ったのは、DIを利用するとテストが楽になるなと思った。
後は、Mockitoが便利すぎてヤバイ。
Mockito、マジやばくね?

参考サイト

ユニットテストの自動作成ツールを調べてみた(2019年末版) - Qiita

TestMe - IntelliJ IDEs Plugin | Marketplace

その他雑記

国際フォーラムの解放

そういえば、10/1で国際フォーラムの通行止めが解除されたので、京葉線から品川方面への乗り換えに利用することに。
今まで京葉線ホームから東京駅ホームへ移動するという苦行からやっと解放された。
京葉線から有楽町までの距離と変わらないが、京葉線から東京駅ホームまでの道のりは殺風景だから、心理的に長く歩いてる感じがするんだよね。
今は、京葉線から有楽町までは、人が少なくてかなり快適。

料理

野菜炒めのあんかけ

あまった野菜を適当に炒めて、甘酢餡を作ってかければ、それなりにうまいものが作れることが分かった。
野菜の消費が簡単にできるのがいいと感じた。