{"id":44343,"date":"2020-06-27T23:06:49","date_gmt":"2020-06-27T14:06:49","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=44343"},"modified":"2020-07-07T11:16:56","modified_gmt":"2020-07-07T02:16:56","slug":"hilt-6-1-testing-testing-%ea%b0%9c%ec%9a%94","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=44343","title":{"rendered":"[Hilt] 6.1 Testing &#8211; Testing \uac1c\uc694"},"content":{"rendered":"<p><a href=\"https:\/\/dagger.dev\/hilt\/testing\">https:\/\/dagger.dev\/hilt\/testing<\/a><\/p>\n<hr \/>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/06\/1078edcee19384aeeaa25f053a09c82c.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/06\/1078edcee19384aeeaa25f053a09c82c-236x300.png\" alt=\"\" width=\"236\" height=\"300\" class=\"aligncenter size-medium wp-image-44317\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/06\/1078edcee19384aeeaa25f053a09c82c-236x300.png 236w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/06\/1078edcee19384aeeaa25f053a09c82c-768x975.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/06\/1078edcee19384aeeaa25f053a09c82c-807x1024.png 807w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/06\/1078edcee19384aeeaa25f053a09c82c.png 1145w\" sizes=\"(max-width: 236px) 100vw, 236px\" \/><\/a><\/p>\n<h1>6.1 Testing &#8211; Testing \uac1c\uc694<\/h1>\n<h2>\uc18c\uac1c<\/h2>\n<table style=\"width: 100%; border-collapse: collapse; background-color: #e6ffff;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\"><em>Note : \ud604\uc7ac Hilt\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc Instrumentation \uacfc Robolectric \ud14c\uc2a4\ud2b8\ub9cc \uc9c0\uc6d0\ud55c\ub2e4. Hilt\ub294 vanilla JVM \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc9c0\ub9cc \ud3c9\uc18c\uc640 \uac19\uc774 \uc774\ub7ec\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uc9c0 \ubabb\ud558\uac8c \ub9c9\uc9c0\ub294 \uc54a\ub294\ub2e4.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Hilt\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8\uc5d0 \uc758\uc874\uc131 \uc8fc\uc785\uc758 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc5ec \ud14c\uc2a4\ud2b8\ub97c \ub354 \uc27d\uac8c \ub9cc\ub4e0\ub2e4. Hilt\ub294 \ud14c\uc2a4\ud2b8\ub97c \ud1b5\ud574 Dagger \ubc14\uc778\ub529\uc5d0 \uc27d\uac8c \uc811\uadfc\ud558\uac70\ub098 \uc0c8\ub85c\uc6b4 \ubc14\uc778\ub529\uc744 \uc81c\uacf5\ud558\uc5ec \ubc14\uc778\ub529\uc744 \ub300\uccb4 \ud560 \uc218 \uc788\ub2e4. \uac01 \ud14c\uc2a4\ud2b8\ub9c8\ub2e4 Hilt \ucef4\ud3ec\ub10c\ud2b8 \uc138\ud2b8\ub97c \uac00\uc838\uc624\ubbc0\ub85c \ud14c\uc2a4\ud2b8 \ub808\ubca8\ubcc4\ub85c \ubc14\uc778\ub529\uc744 \uc27d\uac8c \uc0ac\uc6a9\uc790\ud654 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc774 \ubb38\uc11c\uc5d0 \uc124\uba85\ub41c \ub9ce\uc740 \ud14c\uc2a4\ud2b8 API\ub4e4\uacfc \uae30\ub2a5\uc740 \ud6cc\ub96d\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc218\ud589\ud558\ub294 \uac83\uc5d0 \ub300\ud55c \ubb34\uc5b8\uc758 \ucca0\ud559\uc744 \uae30\ubc18\uc73c\ub85c \ud558\uace0 \uc788\ub2e4. Hilt\uc758 \ud14c\uc2a4\ud2b8 \ucca0\ud559\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 &#8216;10.2 \ud14c\uc2a4\ud2b8 \ucca0\ud559&#8217;\uc744 \ucc38\uace0\ud558\uc790.<\/p>\n<h2>\ud14c\uc2a4\ud2b8 \uc124\uc815\ud558\uae30<\/h2>\n<table style=\"width: 100%; border-collapse: collapse; background-color: #e6ffff;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\"><em>Note : Gradle \uc0ac\uc6a9\uc790\ub294 &#8216;3. Gradle \uc124\uc815\ud558\uae30&#8217; \ud3b8\uc744 \ucc38\uace0\ud558\uc5ec Hilt \ud14c\uc2a4\ud2b8 \ube4c\ub4dc \uc758\uc874\uc131\uc744 \uba3c\uc800 \ucd94\uac00\ud574\uc57c \ud55c\ub2e4.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ud14c\uc2a4\ud2b8\uc5d0\uc11c Hilt\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294:<\/p>\n<ol>\n<li>\ud14c\uc2a4\ud2b8 \ud074\ub798\uc2a4\uc5d0 @HiltAndroidTest\uc744 \ucd94\uac00\ud55c\ub2e4.<\/li>\n<li>HiltAndroidRule \ud14c\uc2a4\ud2b8 \ub8f0\uc744 \ucd94\uac00\ud55c\ub2e4.<\/li>\n<li>\uc548\ub4dc\ub85c\uc774\ub4dc Application \ud074\ub798\uc2a4\ub97c \uc704\ud574 HiltTestApplication\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<\/ol>\n<p>\uc608\ub97c \ub4e4\uba74,<\/p>\n<pre class=\"\"><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n    @get:Rule val rule = HiltAndroidRule(this)\r\n    ...\r\n}\r\n<\/code><\/pre>\n<p>\uc55e\uc5d0\uc11c \uc5b8\uae09\ud55c 3\ubc88\uc9f8\uc5d0\uc11c, \ud14c\uc2a4\ud2b8\ub97c \uc704\ud55c Application \ud074\ub798\uc2a4\ub97c \uc124\uc815\ud558\ub294 \uac83\uc740 \ud14c\uc2a4\ud2b8\uac00 Robolectric \ud14c\uc2a4\ud2b8\uc778\uc9c0, Instrumentation \ud14c\uc2a4\ud2b8\uc778\uc9c0\uc5d0 \ub530\ub77c \ub2e4\ub974\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 &#8216;6.2 Robolectric \ud14c\uc2a4\ud2b8\ud558\uae30&#8217; \ub610\ub294 &#8216;6.3 Instrumentation \ud14c\uc2a4\ud2b8\ud558\uae30&#8217;\ub97c \ucc38\uace0\ud558\uc790. \uc774 \uc7a5\uc5d0\uc11c \ub2e4\ub8e8\ub294 \ub0b4\uc6a9\uc740 Robolectric \uadf8\ub9ac\uace0 Instrumentation \ud14c\uc2a4\ud2b8 \ub458\ub2e4 \uc801\uc6a9 \uac00\ub2a5\ud55c \ubd80\ubd84\uc744 \ub2e4\ub8ec\ub2e4.<\/p>\n<h2>\ubc14\uc778\ub529\uc5d0 \uc811\uadfc\ud558\uae30<\/h2>\n<p>\ud14c\uc2a4\ud2b8\ub294 \uc885\uc885 Hilt \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \ubc14\uc778\ub529\uc744 \uc694\uccad\ud558\uac8c \ub41c\ub2e4. \uc774 \uc139\uc158\uc5d0\uc11c\ub294 \uac01\uae30 \ub2e4\ub978 \ucef4\ud3ec\ub10c\ud2b8\uc758 \ubc14\uc778\ub529\uc744 \uc5b4\ub5bb\uac8c \uc694\uccad\ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf8\ub2e4.<\/p>\n<h3>ApplicationComponent \ubc14\uc778\ub529\uc5d0 \uc811\uadfc\ud558\uae30<\/h3>\n<p>ApplicationComponent \ubc14\uc778\ub529\uc740 @Inject\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud544\ub4dc\uc5d0 \uc9c1\uc811\uc801\uc73c\ub85c \uc8fc\uc785\uc774 \uac00\ub2a5\ud558\ub2e4. HiltAndroidRule#inject()\ub97c \ud638\ucd9c\ud558\uae30 \uc804\uae4c\uc9c0 \uc8fc\uc785\uc740 \uc77c\uc5b4\ub098\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n\r\n    @get:Rule HiltAndroidRule hiltRule = HiltAndroidRule(this)\r\n\r\n    @Inject foo: Foo@Test\r\n\r\n    fun testFoo() {\r\n        assertThat(foo).isNull()\r\n        hiltRule.inject()\r\n        assertThat(foo).isNotNull()\r\n    }\r\n}\r\n<\/code><\/pre>\n<h3>ActivityComponent \ubc14\uc778\ub529\uc5d0 \uc811\uadfc\ud558\uae30<\/h3>\n<p>ActivityComponent \ubc14\uc778\ub529\uc744 \uc694\uccad\ud558\ub294 \uac83\uc740 Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Activity\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ud544\uc694\ub85c \ud55c\ub2e4. \ud55c\uac00\uc9c0 \ubc29\ubc95\uc740 \uc791\uc131\ud55c \ud14c\uc2a4\ud2b8\uc5d0 \ud544\uc694\ud55c \ubc14\uc778\ub529\uc5d0 \ub300\ud574 @Inject \ud544\ub4dc\ub97c \ud3ec\ud568\ud558\ub294 \ub0b4\uc7ac\ub41c Activity\ub97c \uc815\uc758\ud558\ub294 \uac83\uc774\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c\uc5d0 \ud14c\uc2a4\ud2b8 \uc561\ud2f0\ube44\ud2f0 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uc5ec \ubc14\uc778\ub529\uc744 \uc5bb\uc744 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n\r\n    @AndroidEntryPoint\r\n    class TestActivity : AppCompatActivity() {\r\n        @Inject foo: Foo\r\n    }\r\n\r\n    ...\r\n    val foo = testActivity.foo\r\n}\r\n<\/code><\/pre>\n<p>\ub2e4\ub978 \ubc29\ubc95\uc73c\ub85c, \ud14c\uc2a4\ud2b8\uc5d0\uc11c Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Activity \uc778\uc2a4\ud134\uc2a4\ub97c \uac00\uc9c0\uace0 \uc788\ub2e4\uba74, EntryPoint\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5b4\ub5a4 ActivityComponent \ubc14\uc778\ub529\ub3c4 \uc5bb\uc744 \uc218 \uc788\uac8c \ub41c\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n\r\n    @EntryPoint\r\n    @InstallIn(ActivityComponent::class)\r\n    interface FooEntryPoint {\r\n        fun getFoo() : Foo\r\n    }\r\n\r\n    ...\r\n    val foo = EntryPoints.get(activity, FooEntryPoint::class.java).getFoo()\r\n}\r\n<\/code><\/pre>\n<h3>FragmentComponent \ubc14\uc778\ub529 \uc811\uadfc\ud558\uae30<\/h3>\n<p>ActivityComponent \ubc14\uc778\ub529\uc5d0 \uc811\uadfc\ud558\ub294 \ubc29\ubc95\uacfc \uc720\uc0ac\ud558\uac8c FragmentComponent \ubc14\uc778\ub529\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4. \uc8fc\uc694 \ucc28\uc774\uc810\uc740 FragmentComponent \ubc14\uc778\ub529\uc5d0 \uc811\uadfc\ud558\ub294 \uac83\uc740 Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Activity\uc640 Fragment \uc778\uc2a4\ud134\uc2a4\ub97c \ubaa8\ub450 \ud544\uc694\ub85c \ud55c\ub2e4\ub294 \uc810\uc774\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n\r\n    @AndroidEntryPoint\r\n    class TestFragment : Fragment() {\r\n      @Inject foo: Foo\r\n    }\r\n\r\n    ...\r\n    val foo = testFragment.foo\r\n}\r\n<\/code><\/pre>\n<p>\ub2e4\ub978 \ubc29\ubc95\uc73c\ub85c, \ud14c\uc2a4\ud2b8\uc5d0\uc11c Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Fragment \uc778\uc2a4\ud134\uc2a4\ub97c \uac00\uc9c0\uace0 \uc788\ub2e4\uba74, EntryPoint\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5b4\ub5a4 FragmentComponent \ubc14\uc778\ub529\ub3c4 \uc5bb\uc744 \uc218 \uc788\uac8c \ub41c\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n\r\n    @EntryPoint\r\n    @InstallIn(FragmentComponent::class)\r\n    interface FooEntryPoint {\r\n        fun getFoo() : Foo\r\n    }\r\n\r\n    ...\r\n    val foo = EntryPoints.get(fragment, FooEntryPoint::class.java).getFoo()\r\n}\r\n<\/code><\/pre>\n<table style=\"width: 100%; border-collapse: collapse; background-color: #ffe6e6;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\"><em>Warning : Hilt\ub294 Activity \ud074\ub798\uc2a4\ub97c \uc9c0\uc815\ud560 \ubc29\ubc95\uc774 \uc5c6\uace0 Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Fragment\ub294 Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Activity\uc5d0 \ud3ec\ud568\ub418\uc5b4\uc57c \ud558\uae30 \ub54c\ubb38\uc5d0 \ud604\uc7ac\ub294 FragmentScenario\ub97c \uc9c0\uc6d0\ud558\uace0 \uc788\uc9c0 \uc54a\ub2e4. \ud55c \uac00\uc9c0 \ud574\uacb0\ucc45\uc740 Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Activity\ub97c \uc2e4\ud589\ud558\uace0 Fragment\ub97c \ubd99\uc774\ub294 \uac83\uc774\ub2e4.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\ubc14\uc778\ub529 \ucd94\uac00\ud558\uae30<\/h2>\n<p>\ud14c\uc2a4\ud2b8\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud504\ub85c\ub355\uc158 \ube4c\ub4dc\uc5d0 \ud3ec\ud568\ub418\uc9c0 \uc54a\uc740 \ucd94\uac00 Dagger \ubc14\uc778\ub529\uc744 \ucd94\uac00\uc801\uc73c\ub85c \uc81c\uacf5\ud574\uc57c \ud560 \uc218\ub3c4 \uc788\ub2e4. \ub610\ud55c \ud14c\uc2a4\ud2b8\ub4e4\uc740 \ud14c\uc2a4\ud2b8\ub9c8\ub2e4 \ub2e4\ub978 \uac12\uc73c\ub85c \ub3d9\uc77c\ud55c \ubc14\uc778\ub529\uc744 \uc81c\uacf5\ud574\uc57c \ud560 \uc218\ub3c4 \uc788\ub2e4. \uc774 \uc139\uc158\uc5d0\uc11c\ub294 Hilt\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud14c\uc2a4\ud2b8\uc5d0 \ubc14\uc778\ub529\uc744 \uc81c\uacf5\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc124\uba85\ud55c\ub2e4.<\/p>\n<h3>\ub0b4\uc7ac\ub41c \ubaa8\ub4c8<\/h3>\n<p>\ubcf4\ud1b5 @InstallIn \ubaa8\ub4c8\uc740 \ubaa8\ub4e0 \ud14c\uc2a4\ud2b8\uc758 Hilt \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc124\uce58\ub41c\ub2e4. \ud558\uc9c0\ub9cc \ubc14\uc778\ub529\uc774 \ud2b9\uc815 \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub9cc \uc124\uce58\ub418\uc5b4\uc57c \ud55c\ub2e4\uba74 \ud14c\uc2a4\ud2b8 \ud074\ub798\uc2a4\ub0b4\uc5d0 @InstallIn \ubaa8\ub4c8\uc744 \ub0b4\uc7ac \uc2dc\ucf1c\uc11c \uc218\ud589 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n\r\n    \/\/ \ub0b4\uc7ac\ub41c \ubaa8\ub4c8\uc740 \ud14c\uc2a4\ud2b8 \ubc16\uc758 Hilt \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub9cc \uc124\uce58\ub41c\ub2e4\r\n    @Module\r\n    @InstallIn(ApplicationComponent::class)\r\n    object FakeBarModule {\r\n        @Provides \r\n        fun provideBar() = Bar()\r\n    }\r\n    ...\r\n}\r\n<\/code><\/pre>\n<p>\ub530\ub77c\uc11c \ub2e4\ub978 \uad6c\ud604\uc73c\ub85c \ub3d9\uc77c\ud55c \ubc14\uc778\ub529\uc744 \uc81c\uacf5\ud574\uc57c \ud558\ub294 \ub2e4\ub978 \ud14c\uc2a4\ud2b8\uac00 \uc788\ub294 \uacbd\uc6b0 \uc911\ubcf5 \ubc14\uc778\ub529 \ucda9\ub3cc\uc5c6\uc774 \uc218\ud589 \ud560 \uc218 \uc788\ub2e4<\/p>\n<p>Hilt\ub294 \uc815\uc801\uc73c\ub85c \ub0b4\uc7ac\ub41c @InstallIn \ubaa8\ub4c8 \uc678\uc5d0\ub3c4 \ud14c\uc2a4\ud2b8 \ub0b4\uc5d0\uc11c \ub0b4\ubd80 (\ube44-\uc815\uc801) @InstallIn \ubaa8\ub4c8\uc744 \uc9c0\uc6d0\ud55c\ub2e4. \ub0b4\ubd80 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uba74 @Provides \uba54\uc18c\ub4dc\uac00 \ud14c\uc2a4\ud2b8 \uc778\uc2a4\ud134\uc2a4\uc758 \uba64\ubc84\ub97c \ucc38\uc870 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; background-color: #ffe6e6;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\"><em>Warning : Hilt\ub294 \uc0dd\uc131\uc790 \ub9e4\uac1c \ubcc0\uc218\uac00 \uc788\ub294 @InstallIn \ubaa8\ub4c8\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>@BindValue<\/h3>\n<p>\uac04\ub2e8\ud55c \ubc14\uc778\ub529, \ud2b9\ud788 \ud14c\uc2a4\ud2b8 \uba54\uc11c\ub4dc\uc5d0\uc11c \uc811\uadfc\ud574\uc57c \ud558\ub294 \ubc14\uc778\ub529\uc758 \uacbd\uc6b0, \ubaa8\ub4c8\uacfc \ubc14\uc778\ub529\uc744 \ud504\ub85c\ube44\uc804 \uba54\uc11c\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 \ubcf4\uc77c\ub7ec\ud50c\ub808\uc774\ud2b8 \ucf54\ub4dc\ub97c \ud68c\ud53c\ud558\uae30 \uc704\ud574 Hilt\ub294 \ud3b8\ub9ac\ud55c \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc81c\uacf5\ud55c\ub2e4.<\/p>\n<p>@BindValue\ub294 \uc27d\uac8c \ud14c\uc2a4\ud2b8\uc5d0\uc11c \ud544\ub4dc\ub97c Dagger \uadf8\ub798\ud504\uc5d0 \ubc14\uc778\ub529 \ud560 \uc218 \uc788\ub294 \uc5b4\ub178\ud14c\uc774\uc158\uc774\ub2e4. \uc774\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, @BindValue \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ud544\ub4dc\uc5d0 \ucd94\uac00\ud558\uba74 \uc120\uc5b8\ub41c \ud55c\uc815\uc790 \uadf8\ub9ac\uace0 \ud544\ub4dc \ud0c0\uc785\uacfc \ud568\uaed8 \ubc14\uc778\ub529 \ub41c\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n    ...\r\n    @BindValue fakeBar: Bar = new FakeBar()\r\n}\r\n<\/code><\/pre>\n<p>\ubc14\uc778\ub529\uc758 \uc2a4\ucf54\ud504\uac00 \ud544\ub4dc\uc5d0 \uc5f0\uacb0\ub418\uace0 \ud14c\uc2a4\ud2b8\uc5d0 \uc758\ud574 \uc81c\uc5b4\ub418\ubbc0\ub85c @BindValue\ub294 \uc2a4\ucf54\ud504 \uc5b4\ub178\ud14c\uc774\uc158\uc758 \uc0ac\uc6a9\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4. \ud544\ub4dc \uac12\uc740 \uc694\uccad \ub420 \ub54c\ub9c8\ub2e4 \ucffc\ub9ac\ub418\ubbc0\ub85c \ud14c\uc2a4\ud2b8\uc5d0\uc11c \ud544\uc694\ud55c \ub300\ub85c \ubcc0\uacbd \ub420 \uc218 \uc788\ub2e4. \ubc14\uc778\ub529\uc744 \uc2e4\uc9c8\uc801\uc73c\ub85c \uc2f1\uae00\ud1a4\uc73c\ub85c \ub9cc\ub4dc\ub824\uba74 \ud544\ub4dc\uac00 \ud14c\uc2a4\ud2b8\ub2f9 \ud55c\ubc88\ub9cc \uc124\uc815\ub418\ub3c4\ub85d \ud574\uc57c\ud55c\ub2e4. \uc608\ub97c\ub4e4\uc5b4 \ud544\ub4dc\uc758 \uc774\ub2c8\uc15c\ub77c\uc774\uc800 \ub610\ub294 \ud14c\uc2a4\ud2b8\uc758 @Before \uba54\uc18c\ub4dc\uc5d0\uc11c \ud544\ub4dc \uac12\uc744 \uc124\uc815\ud55c\ub2e4.<\/p>\n<p>\ub9c8\ucc2c\uac00\uc9c0\ub85c Hilt\uc5d0\ub294 @IntoSet, @ElementIntoSet \ubc0f @IntoMap\uc744 \uac01\uac01 \uc9c0\uc6d0\ud558\uae30 \uc704\ud574 @BindValueIntoSet, @BindElementsIntoSet \ubc0f @BindValueIntoMap\uc744 \uc774\uc6a9\ud55c \uba40\ud2f0 \ubc14\uc778\ub529\uc5d0 \ub300\ud55c \ud3b8\ub9ac\ud55c \uc5b4\ub178\ud14c\uc774\uc158\ub3c4 \uc788\ub2e4. (@BindValueIntoMap\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \ud544\ub4dc\uc5d0 @MapKey \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud574\uc57c \ud55c\ub2e4.)<\/p>\n<h3>\uc8fc\uc758\uc0ac\ud56d<\/h3>\n<p>@BindValue\ub97c \uc0ac\uc6a9\ud558\uac70\ub098 \ube44-\uc815\uc801\uc778 \ub0b4\ubd80 \ubaa8\ub4c8\uacfc \ud568\uaed8 ActivityScenarioRule\uc744 \uc0ac\uc6a9\ud560 \ub54c\ub294 \uc8fc\uc758\ud574\uc57c \ud55c\ub2e4. ActivityScenarioRule\uc740 @Before \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uae30 \uc804\uc5d0 Activity\ub97c \uc0dd\uc131\ud558\ubbc0\ub85c, @BindValue \ud544\ub4dc\uac00 @Before(\ub610\ub294 \uadf8 \uc774\ud6c4)\uc5d0 \ucd08\uae30\ud654 \ub41c\ub2e4\uba74 \ud544\ub4dc\uac00 \ucd08\uae30\ud654 \ub418\uc9c0 \uc54a\uc740 \uc0c1\ud0dc\uc5d0\uc11c \ubc14\uc778\ub529\uc744 Activity\uc5d0 \uc8fc\uc785\ud560 \uac00\ub2a5\uc131\uc774 \uc788\ub2e4. \uc774\ub7f0 \uacbd\uc6b0\ub97c \ud53c\ud558\ub824\uba74 @BindValue\ub97c \ud544\ub4dc\uc5d0\uc11c \ubc14\ub85c \ucd08\uae30\ud654 \ud558\uba74 \ub41c\ub2e4.<\/p>\n<h2>\ubc14\uc778\ub529 \uad50\uccb4\ud558\uae30<\/h2>\n<h3>@UninstallModules<\/h3>\n<p>\uc77c\ubc18\uc801\uc778 \ud14c\uc2a4\ud2b8 \uc720\uc988 \ucf00\uc774\uc2a4\uc5d0\uc11c\ub294 \ud504\ub85c\ub355\uc158\uc6a9 \ubc14\uc778\ub529\uc744 \ud14c\uc2a4\ud2b8\uc6a9 \ubc14\uc778\ub529\uc73c\ub85c \uad50\uccb4\ud560 \ud544\uc694\uc131\uc774 \uc788\ub2e4. \uc608\ub97c \ub4e4\uba74 Fake \ub610\ub294 Mock\uc774 \uc788\ub294\ub370, Hilt \ud14c\uc2a4\ud2b8\uc5d0\uc11c \ud504\ub85c\ub355\uc158\uc6a9 \ubc14\uc774\ub529\uc740 @UninstallModules\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud3ec\ud568\ub41c \ud504\ub85c\ub355\uc158 \ubaa8\ub4c8\uc744 \uba3c\uc800 \uc81c\uac70\ud558\uc5ec \ud504\ub85c\ub355\uc158 \ubc14\uc778\ub529\uc744 \uad50\uccb4 \ud560 \uc218 \uc788\ub2e4. \uadf8\ub7f0 \ub4a4 \ud14c\uc2a4\ud2b8\uc5d0\uc11c \uc0c8\ub85c\uc6b4 \ubc14\uc778\ub529\uc744 \uc81c\uacf5\ud55c\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">@UninstallModules(ProdFooModule::class)\r\n@HiltAndroidTest\r\nclass FooTest {\r\n\r\n  ...\r\n  @BindValue fakeFoo: Foo = new FakeFoo()\r\n}\r\n<\/code><\/pre>\n<p>@UninstallModules\ub294 \uc8fc\uc5b4\uc9c4 \ud14c\uc2a4\ud2b8\uc640 \uad00\ub828\ud558\uc5ec \ud574\ub2f9 \ubaa8\ub4c8\uc5d0\uc11c @InstallIn \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc81c\uac70\ud558\ub294 \uac83\uacfc \uac19\ub2e4. Hilt\ub294 \uac1c\ubcc4 \ubc14\uc778\ub529 \uc81c\uac70\ub97c \uc9c1\uc811 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc9c0\ub9cc \ud2b9\uc815 \ubaa8\ub4c8\uc5d0 \ub2e8\uc77c \ubc14\uc778\ub529\ub9cc \ud3ec\ud568\ud558\uba74 \uc2e4\uc9c8\uc801\uc73c\ub85c \uac00\ub2a5\ud558\ub2e4.<\/p>\n<h2>\uc0ac\uc6a9\uc790\ud654 \ud14c\uc2a4\ud2b8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/h2>\n<p>\ubaa8\ub4e0 Hilt \ud14c\uc2a4\ud2b8\ub294 \ubc18\ub4dc\uc2dc \uc548\ub4dc\ub85c\uc774\ub4dc Application \ud074\ub798\uc2a4 \ub300\uc6a9\uc73c\ub85c HiltTestApplication\uc744 \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4. Hilt\ub294 \uae30\ubcf8 \ud14c\uc2a4\ud2b8\uc6a9 Application\uc778 HiltTestApplication\uc744 \uc81c\uacf5\ud55c\ub2e4. HiltTestApplication\uc740 MultiDexApplication\uc744 \ud655\uc7a5\ud55c \ud074\ub798\uc2a4\ub2e4. \uadf8\ub7ec\ub098 \ub2e4\ub978 \uae30\ubcf8 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud574\uc11c \ud14c\uc2a4\ud2b8\ud558\uae30 \ud798\ub4e0 \uba87\uac00\uc9c0 \uacbd\uc6b0\uac00 \uc788\ub2e4.<\/p>\n<h3>@CustomTestApplication<\/h3>\n<p>\ub9cc\uc57d \ud14c\uc2a4\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\uc790\ud654 \uae30\ubcf8 \ud074\ub798\uc2a4\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\uc5d0\ub294 @CustomTestApplication \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ud1b5\ud574 \uc8fc\uc5b4\uc9c4 Application\ud074\ub798\uc2a4\ub97c \ud655\uc7a5\ud558\ub294 Hilt\uc6a9 \ud14c\uc2a4\ud2b8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>@CustomTestApplication\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \ud074\ub798\uc2a4 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 @CustomTestApplication \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud558\uace0 \uc5b4\ub178\ud14c\uc774\uc158 \uac12\uc73c\ub85c \uae30\ubcf8 \ud074\ub798\uc2a4\ub97c \uba85\uc2dc\ud558\uba74 \ub41c\ub2e4.<\/p>\n<pre><code class=\"language-kotlin\">\/\/ MyCustom_Application.class\ub97c \uc0dd\uc131\ud558\uac8c \ub41c\ub2e4.\r\n@CustomTestApplication(MyBaseApplication::class)\r\ninterface MyCustom\r\n<\/code><\/pre>\n<p>\uc55e\uc758 \uc608\uc81c\ub294 Hilt\uac00 MyCustom_Application\uc774\ub77c\ub294 MyBaseApplication\uc744 \ud655\uc7a5\ud55c \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud55c\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uc0dd\uc131\ub41c Application \uc774\ub984\uc740 \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ub2ec\ub9b0 \ud074\ub798\uc2a4\uc758 \uc774\ub984 \ub4a4\uc5d0 _Application\uc744 \ubd99\uc778\ub2e4. \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ub2ec\ub9b0 \ud074\ub798\uc2a4\uac00 \ub0b4\uc7ac\ub41c \ud074\ub798\uc2a4\ub77c\uba74 \ud074\ub798\uc2a4\uc758 \uc774\ub984\uc740 \ubc14\uae65 \ud074\ub798\uc2a4\uc758 \uc774\ub984\ub3c4 \ubc11\uc904\ud45c\uc2dc\ub85c \ubd84\ub9ac\ud558\uc5ec \ud3ec\ud568\ud558\uac8c \ub41c\ub2e4. \uc5b4\ub178\ud14c\uc774\uc158\uc774 \ub2ec\ub9b0 \ud074\ub798\uc2a4\ub294 \uc0dd\uc131\ub41c Application\uc758 \uc774\ub984 \uc678\uc5d0\ub294 \uad00\ub828\uc774 \uc5c6\ub2e4.<\/p>\n<h3>\ubaa8\ubc94 \uc0ac\ub840<\/h3>\n<p>\ubaa8\ubc94 \uc0ac\ub840\ub85c @CustomTestApplication \uc0ac\uc6a9\uc744 \ud53c\ud558\uace0 \ub300\uc2e0\uc5d0 \ud14c\uc2a4\ud2b8\uc5d0\uc11c HiltTestApplication\uc744 \uc0ac\uc6a9\ud558\uc790. \uc77c\ubc18\uc801\uc73c\ub85c Activity, Fragment \ub4f1\uc774 \ud3ec\ud568\ub41c \uc0c1\uc704 \ud074\ub798\uc2a4\uc640 \ub3c5\ub9bd\uc801\uc73c\ub85c \ub9cc\ub4e4\uba74 \ub098\uc911\uc5d0 \uc27d\uac8c \uad6c\uc131\ud558\uace0 \uc7ac\uc0ac\uc6a9 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc \uc0ac\uc6a9\uc790\ud654 \uae30\ubcf8 Application\uc744 \ubc18\ub4dc\uc2dc \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4\uba74 \ud504\ub85c\ub355\uc158 \uc0dd\uba85\uc8fc\uae30\uc5d0 \ub300\ud574 \uc54c\uc544\uc57c \ud560 \uba87\uac00\uc9c0 \ubbf8\ubb18\ud55c \ucc28\uc774\uc810\uc774 \uc788\ub2e4.<\/p>\n<p>\uccab\ubc88\uc9f8 \ucc28\uc774\uc810\uc740 Instrumentation \ud14c\uc2a4\ud2b8\ub294 \uac19\uc740 Application \uc778\uc2a4\ud134\uc2a4\ub97c \ub9e4 \ud14c\uc2a4\ud2b8\ub9c8\ub2e4 \uc0ac\uc6a9\ud558\uac8c \ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uc0ac\uc6a9\uc790\ud654 \ud14c\uc2a4\ud2b8 Application\uc744 \uc0ac\uc6a9\ud560 \ub54c\ub294 \ud14c\uc2a4\ud2b8 \uc804\ubc18\uc5d0 \uac78\uccd0 \ub73b\ud558\uc9c0 \uc54a\uc740 \uad6c\uba4d\uc774 \uc0dd\uae30\uae30 \ub9c8\ub828\uc774\ub2e4. Application \uc0c1\ud0dc\uc5d0 \uc758\uc874\uc801\uc774\uac70\ub098 \uc0c1\ud0dc\ub97c \uc800\uc7a5\ud558\ub294 \ud14c\uc2a4\ud2b8\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4.<\/p>\n<p>\ub610 \ub2e4\ub978 \ucc28\uc774\uc810\uc740 \ud14c\uc2a4\ud2b8 Application\uc5d0\uc11c Hilt \ucef4\ud3ec\ub10c\ud2b8\ub294 super#onCreate\uc5d0\uc11c \uc0dd\uc131\ub418\uc9c0 \uc54a\ub294\ub2e4. \uc774\ub7f0 \uc81c\uc57d\uc740 \uc8fc\ub85c Hilt\uc758 \uc77c\ubd80 \uae30\ub2a5\uc774(\uc608: @BindValue) \ud14c\uc2a4\ud2b8 \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc758\uc874\ud558\uae30 \ub54c\ubb38\uc5d0 Application#onCreate\uac00 \ud638\ucd9c \ub420 \ub54c\uae4c\uc9c0 \ud14c\uc2a4\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \ubc1c\uc0dd\ud55c\ub2e4. \ub530\ub77c\uc11c \ud504\ub85c\ub355\uc158\uc6a9 Application\uacfc \ub2ec\ub9ac \uc0ac\uc6a9\uc790\ud654 \uae30\ubcf8 Application\uc740 Application#onCreate \uc911\uc5d0 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\uc544\uc57c \ud55c\ub2e4. \uc5ec\uae30\uc5d0\ub294 Application\uc744 \uba64\ubc84\ub85c \uc8fc\uc785\ud558\ub294 \uac83\uc774 \ud3ec\ud568\ub41c\ub2e4. \uc774\ub7f0 \ubb38\uc81c\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574\uc11c Hilt\ub294 \uae30\ubcf8 Application\uc5d0\uc11c \uc758\uc874\uc131 \uc8fc\uc785\ud558\ub294 \uac83\uc744 \ud5c8\uc6a9\ud558\uace0 \uc788\uc9c0 \uc54a\ub2e4.<\/p>\n<h2>Hilt \uaddc\uce59 \uc21c\uc11c<\/h2>\n<p>\uc5ec\ub7ec\uac00\uc9c0 \ud14c\uc2a4\ud2b8 \uaddc\uce59\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 HiltAndroidRule\uc774 Hilt \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \uc811\uadfc\uc744 \ud544\uc694\ub85c\ud558\ub294 \ub2e4\ub978 \ud14c\uc2a4\ud2b8 \uaddc\uce59 \uc804\uc5d0 \uc2e4\ud589\ub418\ub3c4\ub85d \ud574\uc57c \ud55c\ub2e4. \uc608\ub97c \ub4e4\uba74 ActivityScenarioRule\uc740 Activity#onCreate\ub97c \ud638\ucd9c\ud55c\ub2e4(Hilt\ub97c \uc0ac\uc6a9\ud558\ub294 Activity\uc758 \uacbd\uc6b0 Hilt \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc218\ud589\ud574\uc57c \ud55c\ub2e4). \ub530\ub77c\uc11c ActivityScenarioRule\uc740 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc801\uc808\ud788 \ucd08\uae30\ud654 \ub41c \uac83\uc744 \ubcf4\uc7a5\ud558\uae30 \uc704\ud574 HiltAndroidRule \ud6c4\uc5d0 \uc2e4\ud589\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; background-color: #e6ffff;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\"><em>Note : \ub9cc\uc57d 4.13 \ubc84\uc804 \ubbf8\ub9cc\uc758 JUnit\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 RuleChain\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc21c\uc11c\ub97c \uba85\uc2dc\ud558\uc790.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre class=\"\"><code class=\"language-kotlin\">@HiltAndroidTest\r\nclass FooTest {\r\n    \/\/ ActivityScenarioRule\uc744 \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 Hilt \ucef4\ud3ec\ub10c\ud2b8\uac00 \ucd08\uae30\ud654\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.\r\n    @get:Rule(order = 0)\r\n    val hiltRule = HiltAndroidRule(this);\r\n\r\n    @get:Rule(order = 1)\r\n    val scenarioRule = ActivityScenarioRule(MyActivity::class.java)\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/dagger.dev\/hilt\/testing 6.1 Testing &#8211; Testing \uac1c\uc694 \uc18c\uac1c Note : \ud604\uc7ac Hilt\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc Instrumentation \uacfc Robolectric \ud14c\uc2a4\ud2b8\ub9cc \uc9c0\uc6d0\ud55c\ub2e4. Hilt\ub294 vanilla JVM \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc9c0\ub9cc \ud3c9\uc18c\uc640 \uac19\uc774 \uc774\ub7ec\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uc9c0 \ubabb\ud558\uac8c \ub9c9\uc9c0\ub294 \uc54a\ub294\ub2e4. Hilt\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc \ud14c\uc2a4\ud2b8\uc5d0 \uc758\uc874\uc131 \uc8fc\uc785\uc758 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc5ec \ud14c\uc2a4\ud2b8\ub97c \ub354 \uc27d\uac8c \ub9cc\ub4e0\ub2e4. Hilt\ub294 \ud14c\uc2a4\ud2b8\ub97c \ud1b5\ud574 Dagger \ubc14\uc778\ub529\uc5d0 \uc27d\uac8c \uc811\uadfc\ud558\uac70\ub098 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[28],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44343"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44343"}],"version-history":[{"count":4,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44343\/revisions"}],"predecessor-version":[{"id":44394,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44343\/revisions\/44394"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}