DroidKaigi 2019 - Day2 Room1 11:20ã ãSpek2+MockK+JaCoCoã§ã¤ã±ã¦ã Unit Testç°å¢ãæã«å ¥ããï¼ãã®ã»ãã·ã§ã³è³æã§ã

JaCoCo(以éã¯jacocoã¨è¡¨è¨)ã¯Javaã®C0(ã¹ããã)ããã³C1(ãã©ã³ã)ã®ã«ãã¬ãã¸ããã³ã¬ãã¼ãä½æãè¡ãJavaã©ã¤ãã©ãªã§ãã jacocoã¯ã¨ã¦ã便å©ãªã©ã¤ãã©ãªã§ãããä¸é¨ã®Javaæ§æã§ã¯ãæããã«ãã¹ãã³ã¼ãã§ã¯éã£ã¦ããã®ã«ãã«ãã¬ãã¸ã§ã¯ãã¹æ±ãã«ãªããã¨ããã±ã¼ã¹ããã課é¡ãããã¾ãããããå æ¥ãªãªã¼ã¹ãããjacoco 0.8.0ã®ç»å ´ã«ãããå¤ãã®èª²é¡ã解決ããã¾ããã ã¾ã¨ã Jacoco v0.8.0ã«ãã¼ã¸ã§ã³ã¢ãããããã¨ã«ããã以ä¸ã®ãããªJDK7以éã«å°å ¥ãããJavaæ§æã®C0/C1ã«ãã¬ãã¸ãæ£å¸¸ã«åä½ããããã«ãªãã¾ãã try-catch-resourceå¥ Stringã®switchæ synchronizedå¥ Maven, Gradleã§ã¯ãjacocoãã©ã°ã¤ã³ã®ãã¼ã¸ã§ã³ã0.8.0ã«æå®ãããã¨ã«ããå©ç¨å¯è½ã§ãã
Java / Kotlin ã®ã³ã¼ãã«ãã¬ãã¸ãã¼ã«ã¨ã㦠JaCoCo ã使ãããã Gradle ã®ãã«ãã¢ã¸ã¥ã¼ã«ããã¸ã§ã¯ãã§ã® JaCoCo ã®å°å ¥ã«ã¤ãã¦è¨ãã (ãã®å³ã¯ JaCoCo ã«ããã³ã¼ãã«ãã¬ãã¸ã®éè¨çµæã®å±¥æ´ã Codecov ã§è¡¨ç¤ºããä¾ã) JaCoCo ã«ã¤ã㦠JaCoCo ã¯ãJVM è¨èªã®ã³ã¼ãã«ãã¬ãã¸ãã¼ã«ã§ããã Java Agent ã«ãããªã³ã¶ãã©ã¤æ¹å¼ã®ãã¤ãã³ã¼ã instrumentation ã«ããã«ãã¬ãã¸è¨æ¸¬ãå¯è½ã§ããã 以åãKotlin ã®ã³ã¼ãã«ãã¬ãã¸ãã¼ã«ã«ã¤ãã¦æ¸ããã®ã§ããã¡ããåèã«ã©ããã Java (JVM è¨èª) ã«ãããã³ã¼ãã«ãã¬ãã¸ã®è¨æ¸¬æ¹æ³ - ã²ã ã¾ãã½ã±ããã¯å£ããªã Gradle ããã¸ã§ã¯ã㧠JaCoCo ã使ã£ãã«ãã¬ãã¸è¨æ¸¬ãè¡ã Gradle ã® JaCoCo ãã©ã°ã¤ã³ã使ãã
ããã«ã¡ã¯ãYenom Androidã¨ã³ã¸ãã¢ã®ããã(@yuikijp)ã§ãããã®Yenoméçºè ããã°ã®æ å½ã§ãããã¾ãã Yenomã§ã¯Android/iOSå ±ã«ã³ã¼ãã«ãã¬ãã¸ãBitriseã«ã¦è¨æ¸¬ããCodecovãç¨ãã¦GitHubã®PRã§ã³ã¼ãã«ãã¬ãã¸ã¬ãã¼ããé²è¦§ã§ããããã«ãã¦ãã¾ãã ä»åã¯Androidã¢ããªã®ããã¸ã§ã¯ãã§ã®ã³ã¼ãã«ãã¬ãã¸è¨æ¸¬ã®ä»çµã¿ä½ãã«ã¤ãã¦ã話ãã¾ãã JaCoCoã®å°å ¥ JaCoCoã¨ã¯Javaã®ã³ã¼ãã«ãã¬ãã¸è¨æ¸¬ã©ã¤ãã©ãªã§ãã ä»åã¯jacoco-android-gradle-pluginãå°å ¥ãã¾ãã ããã¯ãJaCoCoã®å°å ¥ãåã³Build Variantsçã®Androidã¢ããªã®ããã¸ã§ã¯ãç¨ã®è¨å®ãè¡ã£ã¦ããããã®ã§ããå®ã¯ãã®è¨å®ãçµæ§ç ©éã§ãã¤ã©ã¼ãã¬ã¼ããªçºããã©ã°ã¤ã³ã«ãã¾ãããã¾ãã ãã¦ãæ©éãã©ã°ã¤ã³ã
https://developer.android.com/training/testing/start/index.html src/test/java 以ä¸ã«æ¸ãã¦ãããã¹ãã¯ã"Local Unit Test"ã¨ããããã§ãã ä¸æ¹ãsrc/androidTest/java 以ä¸ã«æ¸ããã¹ãã¯ã"Instrumented Test"ã¨ããããã§ãã ä»ã®ããã¸ã§ã¯ãã§ã¯ããã¹ãã®å®è¡é度ãåªå ãã¦"Local Unit Test"ãæ¸ãã¦ãããã¾ããã®ã«ãã¬ãã¸ãåå¾ãããã¨ãã¦ãã¾ãã ãªã®ã§ããã®è¨å®ãã¾ã¨ãã¾ããã å®éã«ã¯ã https://blog.gouline.net/code-coverage-on-android-with-jacoco-92ec90c9355e#.elikwgbjp ã«æ¸ãã¦ãããã¨ãã»ã¨ãã©ã§ãã æçµçã«è¨å®ãããã®ãã https://git
task jacoco(type: JacocoReport, dependsOn: "testDebug") { reports { xml.enabled = true html.enabled = false xml { destination "${project.rootDir}/build/reports/jacoco/${project.name}/jacoco_report.xml" } } classDirectories = fileTree( dir: './build/intermediates/classes/debug', excludes: ['**/R.class', '**/R$*.class', '**/BuildConfig.class', ]) sourceDirectories = files('src/main/java') executionD
ä¸ç¨®ã®ææ¨ã«ãªãã®ã§ï¼ãªãã ããã ã§ãã¹ãã«ãã¬ãã¸ã¯åããããªãã¾ãï¼ Javaã§ãããã©ããããããµãã¨æ¤ç´¢ããã¨ï¼Coberturaã使ãæ¹æ³ã¨JaCoCoã使ãæ¹æ³ãå¼ã£ãããã¨æããã§ããï¼Coberturaã®æ¹ã¯Java8ã®ã³ã¼ããå«ã¾ãã¦ããã¨JavaNCSSã®å ¼ãåãã§çºçãã¦ä½¿ããªããªã£ããï¼Mavenã®testã©ã¤ããµã¤ã¯ã«ã«findbugsãcheckstyleãå«ããã¨ä½¿ããªããªã£ããã¨è²ã ä¸ä¾¿ãªã®ã§ï¼JaCoCoã使ãæ¹æ³ã§ãããã¨ã«ãªã£ã¦ããã¾ãï¼ Mavenã§ã©ããããã¨ããã¨ï¼pom.xmlã« <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.4.201502262128</version> <executions>
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}