{"id":1337,"date":"2020-04-09T13:54:44","date_gmt":"2020-04-09T04:54:44","guid":{"rendered":"http:\/\/yoonhada.com\/?p=1337"},"modified":"2023-12-26T23:48:43","modified_gmt":"2023-12-26T14:48:43","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-gradle-test","status":"publish","type":"post","link":"http:\/\/yoonhada.com\/?p=1337","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc Gradle Test"},"content":{"rendered":"\n<h2 class=\"has-blue-color has-text-color wp-block-heading\"><strong>Android application Test \ubc29\ubc95<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ud06c\uac8c 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc548\ub4dc\ub85c\uc774\ud2b8 \ud14c\uc2a4\ud2b8(Instrumentation Test)\uc640 Local PC\uc758 JVM\uc744 \ud65c\uc6a9\ud558\ub294 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc758 Local Unit Test \uc785\ub2c8\ub2e4.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc38\uace0) \ub85c\uceec \uc720\ub2db \ud14c\uc2a4\ud2b8\ub294 \ub85c\uceec JVM\uc744 \ud65c\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ud0c0\uae43 \ub514\ubc14\uc774\uc2a4\uc640 \uc5f0\uacb0\ud53c \ud544\uc694\uc5c6\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc758 \uc804\uccb4 \uc2e4\ud589\uc18d\ub3c4\uac00 \ud5a5\uc0c1\ub418\ub294 \ud6a8\uacfc\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub294 APK\ub97c \uc0dd\uc131\ud558\uc5ec \ud0c0\uae43 \ub514\ubc14\uc774\uc2a4\uc5d0 \uc124\uce58\ud558\uace0 \uc2e4\ud589\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \uc2dc\uac04 \uc18c\ubaa8\uac00 \ub9ce\uc740 \ud3b8\uc785\ub2c8\ub2e4.<br> Gradle\uc744 \ud65c\uc6a9\ud654\uc5ec \uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc640 \ub85c\uceec \uc720\ub2db\ud14c\uc2a4\ud2b8\ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<h2 class=\"has-blue-color has-text-color wp-block-heading\"><strong>\ub85c\uceec \uc720\ub2db \ud14c\uc2a4\ud2b8<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">app module\uc758 build.gradle\uc744 \ubcf4\uc2dc\uaca0\uc2b5\ub2c8\ub2e4. dpendencies\ubd80\ubd84\uc5d0 \uc544\ub798\uc640 \uac19\uc774 testCompile\uc774 \uc6ec\ub9cc\ud558\uba74 \ub514\ud3f4\ud2b8\ub85c \uc9c0\uc815\ub418\uc5b4\uc788\uc73c\uc2e4\uac81\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    testCompile 'junit:junit:4.12'\n    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 ExampleUnitTest \ud074\ub798\uc2a4\ub97c \ubcf4\uc2dc\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucf54\ub4dc\uac00 \ubbf8\ub9ac\uc791\uc131\ub418\uc5b4\uc788\ub294\uac83\uc744 \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Junit4\uc5d0\uc11c\ub294 \ud14c\uc2a4\ud2b8\ucf54\ub4dc\uc5d0 @Test\ub77c\ub294 \uc560\ub108\ud14c\uc774\uc158\uc744 \ubd80\ucc29\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() throws Exception {\n        assertEquals(4, 2 + 2);\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\ub2f9 unitTest \ud074\ub798\uc2a4 \uc624\ub978\ucabd \ub9c8\uc6b0\uc2a4\ub85c\ub204\ub974\uace0, run &#8220;ExampleUnitTest&#8221; \uc120\ud0dd\uc2dc \uc815\uc0c1\uc801\uc73c\ub85c \ud14c\uc2a4\ud2b8\ub429\ub2c8\ub2e4. <br>\ub85c\uceec\uc720\ub2db\ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud560\ub54c \ud638\ucd9c\ub418\ub294 \uc911\uc694\ud55c Gradle Task\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">:app:mockableAndroidJar UP-TO-DATE<br> :app:compileDebugUnitTestSources UP-TO-DATE <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.&nbsp;<\/strong>mock(app:mockableAndroidJar&nbsp;) \ud14c\uc2a4\ud06c\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc\uc758 android.jar \ud30c\uc77c\uc744 mock \uc778\ud130\ud398\uc774\uc2a4\ub85c \ucef4\ud30c\uc77c\ud569\ub2c8\ub2e4. \ub85c\uceec \uc720\ub2db \ud14c\uc2a4\ud2b8\uac00 \ub3d9\uc791\ud558\ub824\uba74 \uc548\ub4dc\ub85c\uc774\ub4dc \ucf54\ub4dc\uc5d0 \ub300\ud55c mock \uc778\ud130\ud398\uc774\uc2a4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. mock \uc778\ud130\ud398\uc774\uc2a4 \ud638\ucd9c \uc2dc, \uac00\uc9dc\uac1d\uccb4\ub97c \uc8fc\uc785\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uac00\uc9dc \uac1d\uccb4(mock object)\ub97c \uc774\uc6a9\ud55c \ud14c\uc2a4\ud2b8 \uae30\ubc95\uc740 \uad6c\uae00\ubb38\uc11c\ub97c \ucc38\uace0\ud558\uc2ed\uc2dc\uc624.<br>mock \ud14c\uc2a4\ud2b8 \uc2e4\ud589\uacb0\uacfc\ub294 \/build\/generated\/mockable-android-26.jar(26\uc740 \ubc84\uc804\uba85) \uc785\ub2c8\ub2e4.&nbsp;<br><strong>2.&nbsp;<\/strong>complieDebugUnitTestSources \ud0dc\uc2a4\ud06c\uc785\ub2c8\ub2e4. \ud0dc\uc2a4\ud06c \uc774\ub984\uc790\uccb4\ub300\ub85c \ub514\ubc84\uadf8 \ubaa8\ub4dc\ub85c \ub85c\uceec \uc720\ub2db \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\ub97c \ucef4\ud30c\uc77c\ud569\ub2c8\ub2e4. \ub9b4\ub9ac\uc988 \ubaa8\ub4dc\uc77c\ub54c\ub294 \ub9b4\ub9ac\uc988 \uc774\ub984\uc5d0 \ub9de\uac8c \ud14c\uc2a4\ud06c\uac00 \uc2e4\ud589\ub418\ub294\uac83\uc744 \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;<br>\ub610\ud55c, \ucf58\uc194\uc5d0\uc11c\ub3c4 \ud14c\uc2a4\ud2b8\ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. HTML\ub85c \uacb0\uacfc\uac00 \ucd9c\ub825\ub418\ub294\ub370\uc694. &nbsp;\ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\uc5d0\uc11c cmd\ucc3d\uc744 \uc5f0 \ud6c4,<br>  &gt; gradlew :app:testDebug&nbsp;<br>\uc640\uac19\uc774 \uce58\uc2e0\ud6c4 \uc5d4\ud130\ub97c \ub204\ub974\uace0, app\/build\/reports\/tests\/debug \ud3f4\ub354\uc5d0 \ud14c\uc2a4\ud2b8 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/t1.daumcdn.net\/cfile\/tistory\/237ACF3E5965546F16\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"has-blue-color has-text-color wp-block-heading\"><strong>\uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8\ucf54\ub4dc\ub294 Activity, Fragment, ButtonView, TextView \ub4f1 UI\ucef4\ud3ec\ub10c\ud2b8\uc640, \uc720\ud2f8\ub9ac\ud2f0\ud074\ub798\uc2a4\uc640 \uac19\uc740 Java\ud074\ub798\uc2a4 \ubaa8\ub450 \ud14c\uc2a4\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub9cc \uc5d0\ubbac\ub808\uc774\ud130\ub098, \ud0c0\uae43 \ub514\ubc14\uc774\uc2a4\uc5d0\uc11c \uc2e4\ud589\ud574\uc57c\ud558\ub294 \uc81c\uc57d\uc774 \uc788\uc2b5\ub2c8\ub2e4 .<br>\uc800\ub294 MainActivityTest\ub77c\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uace0 \uc544\ub798\uc640 \uac19\uc774 \ucf54\ub4dc\uc791\uc131 \ud6c4, \uc2e4\uc2dc\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class MainActivityTest extends ActivityInstrumentationTestCase2&lt;MainActivity> {\n    public MainActivityTest() {\n        super(MainActivity.class);\n    }\n\n\n    public  void testHelloLabel(){\n        Activity ac = getActivity();\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">app \ubaa8\ub4c8\uc758\uacbd\uc6b0 \/app\/src\/androidTest\/java \ud3f4\ub354\uc5d0 \uc704\uce58\ud558\uace0\uc788\uc2b5\ub2c8\ub2e4. \uc2e4\ud589\ud558\ub294 \ubc29\ubc95\uc740 \ub85c\uceec \uc720\ub2db\ud14c\uc2a4\ud2b8\uc640 \uc720\uc0ac\ud569\ub2c8\ub2e4.<br>\uc624\ub978\ucabd\ub9c8\uc6b0\uc2a4 \ub204\ub974\uace0, run &#8220;MainActivityTest&#8221; \ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<br>:app:compileDebugAndroidTestSources<br>\uc774\ubc88\uc5d0 \uc2e4\ud589\ub41c gradle test\ub294 unitTest\uac00 \uc544\ub2cc, AndroidTest\ub85c \ubc14\ub010\uac83\uc744 \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>\ucf58\uc194\uc5d0\uc11c\ub3c4 \uc5ed\uc2dc \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>gradlew :app:connectedAndroidTest + \uc5d4\ud130 \uce58\uc2dc\uba74\ub429\ub2c8\ub2e4.gradle \ucf58\uc194\ucc3d\uc5d0 \ub728\ub4ef\uc774 \uc9c4\ud589\ud6c4, \uc644\ub8cc\uad6c\ubb38\uc744 \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br><\/p>\n\n\n\n<h2 class=\"has-blue-color has-text-color wp-block-heading\"><strong>Espresso \uc5f0\ub3d9\ud558\uae30<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Espresso\ub294 Android Testing Support Library\uc5d0 \ud3b8\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uac15\ub825\ud55c \ud14c\uc2a4\ud305 \ub3c4\uad6c\uc774\uc8e0. \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uc2dc\uaca0\uc2b5\ub2c8\ub2e4.<br>app\ubaa8\ub4c8\uc758 build.gradle\uc758 \ub0b4\uc6a9 \ucd94\uac00\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">defaultconfig{\n\u00a0 testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub2e4\uc74c denependencies\ube14\ub85d\uc5d0 \ucd94\uac00\ud560 \ub0b4\uc6a9\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">androidTestCompile 'com.android.support.test:runner:0.4.1'\nandroidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'\ncompile 'com.android.support:appcompat-v7:23.0.1'<\/pre>\n\n\n\n<h2 class=\"has-blue-color has-text-color wp-block-heading\"><strong>\ub85c\uceec \uc720\ub2db \ud14c\uc2a4\ud2b8\uc758 \uc81c\uc57d\uc0ac\ud56d<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c\uceec \uc720\ub2db\ud14c\uc2a4\ud2b8 \uac19\uc740 \uacbd\uc6b0 andoir.util.Log \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c, mock \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc81c\uacf5\ub418\uc9c0\uc548\ud56d \uc624\ub958\ub97c \ub0bc\ub54c\uac00\uc788\uc2b5\ub2c8\ub2e4.<br>\uc774\ub97c \ud53c\ud558\ub824\uba74 &nbsp;\ubaa8\ub4c8 build.gradle\uc5d0 \ub2e4\uc74c \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc57c\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">android{\n\u00a0 testOptions{\n    unitTests.returnDefaultValues = true\u00a0 \u00a0\n  }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadfc\ubcf8\uc801\uc73c\ub85c \ud574\uacb0\ud558\ub824\uba74 PowerMock\uacfc \uac19\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud65c\uc6a9\ud558\uc5ec log \ud074\ub798\uc2a4\uc758 static \uba54\uc11c\ub4dc\ub97c \uc704\ud55c \uac00\uc9dc \uac1d\uccb4\ub97c \uc8fc\uc785\ud558\ub294 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4. PowerMock \uad00\ub828 \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Android application Test \ubc29\ubc95 \ud06c\uac8c 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc548\ub4dc\ub85c\uc774\ud2b8 \ud14c\uc2a4\ud2b8(Instrumentation Test)\uc640 Local PC\uc758 JVM\uc744 \ud65c\uc6a9\ud558\ub294 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc758 Local Unit Test \uc785\ub2c8\ub2e4.&nbsp; \ucc38\uace0) \ub85c\uceec \uc720\ub2db \ud14c\uc2a4\ud2b8\ub294 \ub85c\uceec JVM\uc744 \ud65c\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ud0c0\uae43 \ub514\ubc14\uc774\uc2a4\uc640 \uc5f0\uacb0\ud53c \ud544\uc694\uc5c6\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc758 \uc804\uccb4 \uc2e4\ud589\uc18d\ub3c4\uac00 \ud5a5\uc0c1\ub418\ub294 \ud6a8\uacfc\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub294 APK\ub97c \uc0dd\uc131\ud558\uc5ec \ud0c0\uae43 \ub514\ubc14\uc774\uc2a4\uc5d0 \uc124\uce58\ud558\uace0 \uc2e4\ud589\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \uc2dc\uac04 \uc18c\ubaa8\uac00 \ub9ce\uc740 \ud3b8\uc785\ub2c8\ub2e4. Gradle\uc744 \ud65c\uc6a9\ud654\uc5ec &hellip;<br \/><a href=\"http:\/\/yoonhada.com\/?p=1337\" class=\"more-link pen_button pen_element_default pen_icon_arrow_double\"><span class=\"screen-reader-text\">\uc548\ub4dc\ub85c\uc774\ub4dc Gradle Test<\/span> \ub354\ubcf4\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83],"tags":[17,54],"class_list":["post-1337","post","type-post","status-publish","format-standard","hentry","category-archive","tag-android","tag-gradle"],"_links":{"self":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1337"}],"version-history":[{"count":3,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1337\/revisions"}],"predecessor-version":[{"id":1387,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1337\/revisions\/1387"}],"wp:attachment":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1337"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}