{"id":167,"date":"2018-03-30T13:49:35","date_gmt":"2018-03-30T04:49:35","guid":{"rendered":"http:\/\/www.charlezz.com\/?p=167"},"modified":"2018-03-30T13:49:35","modified_gmt":"2018-03-30T04:49:35","slug":"%ed%85%8c%ec%8a%a4%ed%8a%b8-%eb%8d%94%eb%b8%94","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=167","title":{"rendered":"\ud14c\uc2a4\ud2b8 \ub354\ube14"},"content":{"rendered":"<h1><b>\ud14c\uc2a4\ud2b8 \ub354\ube14(test double)<\/b><\/h1>\n<p>\ud14c\uc2a4\ud2b8 \uc791\uc131\uc2dc, \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\uc640 \uc0c1\ud638\uc791\uc6a9\ud558\ub294 \uac1d\uccb4<br \/>\n&nbsp;<\/p>\n<h2><b>\ud14c\uc2a4\ud2b8 \ub354\ube14\uc758 \uc5ed\ud560<\/b><\/h2>\n<ul>\n<li>\ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\ub97c \uaca9\ub9ac\ud55c\ub2e4.<\/li>\n<li>\ud14c\uc2a4\ud2b8 \uc18d\ub3c4\ub97c \uac1c\uc120\ud55c\ub2e4.<\/li>\n<li>\uc608\uce21\ubd88\uac00\ub2a5\ud55c \uc2e4\ud589 \uc694\uc18c\ub97c \uc81c\uac70\ud55c\ub2e4.<\/li>\n<li>\ud2b9\uc218\ud55c \uc0c1\ud669\uc744 \uc2dc\ubbac\ub808\uc774\uc158\ud55c\ub2e4.<\/li>\n<li>\uac10\ucdb0\uc9c4 \uc815\ubcf4\ub97c \uc5bb\uc5b4\ub0b8\ub2e4.<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n&nbsp;<\/p>\n<h2><b>\ud14c\uc2a4\ud2b8 \ub354\ube14\uc758 \uc885\ub958<\/b><\/h2>\n<p><b>1. Dummy<\/b><br \/>\n\uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \ud14c\uc2a4\ud2b8 \ub354\ube14 \uc720\ud615.<br \/>\n\uad6c\ud604\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uace0,\u00a0\uc8fc\ub85c \ub9e4\uac1c \ubcc0\uc218 \uac12\uc73c\ub85c\ub9cc \ud544\uc694\ud558\uba70 \ub2e4\ub978 \uacf3\uc5d0 \uc774\uc6a9\ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0 \uc8fc\ub85c \uc0ac\uc6a9\ub41c\ub2e4.<br \/>\n\uc9c4\uc815\ud55c \uc758\ubbf8\uc758 dummy\ub294 \uad6c\ud604\uc744 \uc81c\uc678\ud55c \uc778\ud130\ud398\uc774\uc2a4 or \uae30\ubcf8 \ud074\ub798\uc2a4\uc758 \ud30c\uc0dd \uac1c\uccb4.<br \/>\n&nbsp;<br \/>\ndummy \uac1d\uccb4\ub294, \ub2e8\uc9c0 \uc778\uc2a4\ud134\uc2a4\ud654\ub41c \uac1d\uccb4\uac00 \ud544\uc694\ud560 \ubfd0<br \/>\n\ud574\ub2f9 \uac1d\uccb4\uc758 \uae30\ub2a5\uae4c\uc9c0\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud55c\ub2e4.<br \/>\n\ub530\ub77c\uc11c, \ud574\ub2f9 dummy \uac1d\uccb4\uc758 \uba54\uc18c\ub4dc\uac00 \ud638\ucd9c\ub410\uc744 \ub54c\uc758 \uc815\uc0c1 \ub3d9\uc791\uc740 \ubcf4\uc7a5\ub418\uc9c0 \uc54a\ub294\ub2e4.<br \/>\n\ubcf4\ud1b5\uc740 \ud0c0\uc785 \uae30\ubcf8\uac12(0, null, false \ub4f1)\uc73c\ub85c \ubc18\ud658\uac12\uc744 \ub9cc\ub4e4\uc5b4\uc8fc\ub294 \uc120\uc5d0\uc11c \ub9c8\ubb34\ub9ac\ud55c\ub2e4.<br \/>\n&nbsp;<br \/>\n\uc608)<\/p>\n<pre class=\"lang:java decode:true\">public class DummyCoupon implements ICoupon {\n\u00a0 \u00a0 @Override\n\u00a0 \u00a0 public boolean isAppliable(Item item) {\n\u00a0 \u00a0 \u00a0 \u00a0 throw \u00a0new UnsupportedOperationException('\ud638\ucd9c\ub418\uc9c0 \uc54a\uc744 \uc608\uc815');\n\u00a0 \u00a0 }\n}<\/pre>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n<b>2. Stub (\ud1a0\ub9c9, \uaf41\ucd08, \ub0a8\uc740 \ubd80\ubd84, \ubabd\ub2f9\uc5f0\ud544 &#8230; )<\/b><br \/>\n\ud14c\uc2a4\ud2b8 stub\uc740 dummy \uac1d\uccb4\uac00 \ub9c8\uce58 \uc2e4\uc81c\ub85c \ub3d9\uc791\ud558\ub294 \uac83\ucc98\ub7fc \ubcf4\uc774\uac8c \ub9cc\ub4e4\uc5b4\ub193\uc740 \uac1d\uccb4\ub2e4.<br \/>\n&nbsp;<br \/>\nstub\uc740 \uc2e4\uc81c \ucf54\ub4dc\ub098 \uc544\uc9c1 \uc900\ube44\ub418\uc9c0 \ubabb \ud55c \ucf54\ub4dc\uc758 \ud589\ub3d9\uc73c\ub85c \uac00\uc7a5\ud558\ub294 \uba54\ucee4\ub2c8\uc998\uc744 \ub9d0\ud55c\ub2e4.<br \/>\nstub\uc740 \ud638\ucd9c\uc790\ub97c \uc2e4\uc81c \uad6c\ud604\ubb3c\ub85c\ubd80\ud130 \uaca9\ub9ac\uc2dc\ud0ac \ubaa9\uc801\uc73c\ub85c \ub7f0\ud0c0\uc784\uc5d0 \uc2e4\uc81c \ucf54\ub4dc \ub300\uc2e0 \uc0bd\uc785\ub418\ub294 \ucf54\ub4dc \uc870\uac01\uc774\ub2e4.<br \/>\n&nbsp;<br \/>\nstub\uc758 \ubaa9\uc801\uc740 \uc6d0\ub798\uc758 \uad6c\ud604\uc744 \ucd5c\ub300\ud55c \ub2e8\uc21c\ud55c \uac83\uc73c\ub85c \ub300\uccb4\ud558\ub294 \uac83.<br \/>\ndummy\ubcf4\ub2e4 \ud55c \ub2e8\uacc4 \ubc1c\uc804\ud55c \ud615\ud0dc\ub85c, \uc778\ud130\ud398\uc774\uc2a4 or \uae30\ubcf8 \ud074\ub798\uc2a4\uac00 \ucd5c\uc18c\ud55c\uc73c\ub85c \uad6c\ud604\ub41c \ud615\ud0dc.<br \/>\n\uc77c\ubc18\uc801\uc73c\ub85c void\ub97c \ubc18\ud658\ud558\ub294 \uba54\uc11c\ub4dc\uc5d0\ub294 \uad6c\ud604\uc774 \uc5c6\uace0,<br \/>\n\uac12\uc744 \ubc18\ud658\ud558\ub294 \uba54\uc11c\ub4dc\ub294 \ud558\ub4dc \ucf54\ub529\ub41c \uac12\uc744 \ubc18\ud658\ud55c\ub2e4.<br \/>\n&nbsp;<br \/>\n\ub300\ubd80\ubd84\uc758 \uacbd\uc6b0 stub\uc744 \uc774\uc6a9\ud55c \ud14c\uc2a4\ud2b8\uc758 \uc2e0\ub8b0\ub3c4\ub294 \ub192\uc740 \ud3b8\uc774\ub2e4.<br \/>\n\ub2e8\uc810\uc744 \ub9d0\ud558\uc790\uba74, stub \uc81c\uc791\uc774 \uadf8\ub9ac \ub179\ub85d\ud558\uc9c0 \uc54a\ub2e4\ub294 \uac83\uc774\ub2e4.<br \/>\n\ud749\ub0b4\ub0b4\uc57c \ud560 \uc2dc\uc2a4\ud15c\uc774 \ubcf5\uc7a1\ud558\ub2e4\uba74 \ub354\uc6b1 \uadf8\ub7ec\ud558\ub2e4.<br \/>\n&nbsp;<br \/>\n\uc77c\ubc18\uc801\uc73c\ub85c, stub\uc740 \ud3ec\uad04\uc801\uc778 \ucf54\ub4dc \ube14\ub85d\uc744 \ub300\uccb4\ud558\ub294\ub370 \ub354 \uc801\ud569\ud558\ub2e4.<br \/>\n\uc989 stub\uc740 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc774\ub098, \uc11c\ubc84\uc640\uc758 \ucee4\ub125\uc158, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ub4f1<br \/>\n\uc678\ubd80 \uc2dc\uc2a4\ud15c \uc804\uccb4\ub97c \ub300\uccb4\ud558\ub294\ub370 \uc8fc\ub85c \ud65c\uc6a9\ub41c\ub2e4.<br \/>\n&nbsp;<br \/>\nstub\uc740 \ub2e8\uc21c\ud574\uc57c \ud558\uba70, \uc808\ub300 \ud14c\uc2a4\ud2b8\ub098 \uc720\uc9c0\ubcf4\uc218\uac00 \uc694\uad6c\ub418\ub294<br \/>\n\ub610 \ud558\ub098\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ub418\uc5b4\uc11c\ub294 \uc548 \ub41c\ub2e4\ub294 \uac83\uc744 \uae30\uc5b5\ud558\ub77c.<br \/>\n&nbsp;<br \/>\n\uc608)<\/p>\n<pre class=\"lang:java decode:true\">public class StubCoupon implements ICoupon {\n\u00a0 \u00a0 @Override\n\u00a0 \u00a0 public boolean isAppliable(Item item) {\n\u00a0 \u00a0 \u00a0 \u00a0 return true; \/\/ \ud558\ub4dc\ucf54\ub529 true \ubc18\ud658\n\u00a0 \u00a0 }\n}<\/pre>\n<p>&nbsp;<br \/>\nstub\uacfc dummy\uc758 \ucc28\uc774\uc810<\/p>\n<ul>\n<li>\ub2e8\uc9c0 \uc778\uc2a4\ud134\uc2a4\ud654 \ub420 \uc218 \uc788\ub294 \uac1d\uccb4 \uc218\uc900\uc774\uba74 dummy<\/li>\n<li>\uc778\uc2a4\ud134\uc2a4\ud654 \ub41c \uac1d\uccb4\uac00 \ud2b9\uc815 \uc0c1\ud0dc\ub098 \ubaa8\uc2b5\uc744 \ub300\ud45c\ud558\uba74 stub<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n<b>3. Fake<\/b><br \/>\nstub\uc740 \uac70\uc758 \ud558\ub4dc\ucf54\ub529\ub41c \ud615\ud0dc\uc774\uae30 \ub54c\ubb38\uc5d0 \ub85c\uc9c1\uc774 \ub4e4\uc5b4\uac00\ub294 \ubd80\ubd84\uc740 \ud14c\uc2a4\ud2b8\ud560 \uc218 \uc5c6\ub2e4.<br \/>\n\uc774\ub97c\ud14c\uba74, \ud2b9\uc815 \ucfe0\ud3f0\uc774 \uad6c\ub9e4 \uc81c\ud488\uc5d0 \uc801\uc6a9\ub418\ub294\uc9c0 \uc5ec\ubd80\uc5d0 \ub530\ub77c,<br \/>\n\uacb0\uc81c\uc561\uc774 \ubc14\ub00c\ub294\uac78 \ud14c\uc2a4\ud2b8\ud55c\ub2e4\uace0 \uc0dd\uac01\ud574\ubcf4\uc790.<br \/>\n&nbsp;<br \/>\n\uc870\uae08 \uc0ac\uae30 \uac19\uc544 \ubcf4\uc77c \uc218 \uc788\uc9c0\ub9cc, \ub2e4\uc74c\uacfc \uac19\uc774 \uace0\uccd0\ubcf4\uc790.<br \/>\n&nbsp;<br \/>\n\uc608\uc2dc)<br \/>\npublic class StubCoupon implements ICoupon {<br \/>\n@Override<br \/>\npublic boolean isAppliable(Item item) {<br \/>\nif(item.getCategory().equals(&#8216;\ud6c4\ub77c\uc774\ud32c&#8217;)) {<br \/>\nreturn true;<br \/>\n}else if(item.getCategory().equals(&#8216;\uc2dc\uacc4&#8217;)) {<br \/>\nreturn false<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n&nbsp;<br \/>\n\ub85c\uc9c1\uc774\uae34 \ub85c\uc9c1\uc778\ub370, &#8216;\uadf8\ub54c\uadf8\ub54c \ub2ec\ub77c\uc694&#8217;\uc2dd\uc73c\ub85c \ud558\ub4dc\ucf54\ub529\ub418\uc5b4 \uc788\ub294 \ub85c\uc9c1\uc774\ub2e4.<br \/>\n\ud14c\uc2a4\ud2b8 \ub354\ube14\ub85c \ub9cc\ub4e4\uc5b4\uc9c4 \uac1d\uccb4\uac00 \uc774 \uc815\ub3c4\uae4c\uc9c0 \uc9c0\uc6d0\ud558\ub294 \uc218\uc900\uc73c\ub85c \ubc1c\uc804\ud558\uba74<br \/>\n\ub2e8\uc21c stub \uc218\uc900\uc740 \ubc97\uc5b4\ub0ac\ub2e4\uace0 \ubcf8\ub2e4.<br \/>\n\ub9c8\uce58, \uc2e4\uc81c \ub85c\uc9c1\uc774 \uad6c\ud604\ub41c \uac83\ucc98\ub7fc \ubcf4\uc774\ub294\ub370, \uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4\uc9c4 \uac1d\uccb4\ub97c fake \uac1d\uccb4\ub77c\uace0 \ud55c\ub2e4.<br \/>\n&nbsp;<br \/>\n\ubaa8\uc591\ub9cc\uc73c\ub85c\ub294 stub\uacfc fake\uc758 \uacbd\uacc4\ub3c4 \ub531 \uad6c\ubd84 \uc9d3\uae30\ub294 \uc5b4\ub835\ub2e4.<br \/>\n\ub2e4\ub9cc stub\uc740 \ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub300\ud45c\ud558\ub294\ub370 \uc8fc\ub85c \uc4f0\uc774\uace0<br \/>\nfake\ub294 \uc5ec\ub7ec \uac1c\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub300\ud45c\ud560 \uc218 \uc788\ub294 \uacbd\uc6b0\uc774\uac70\ub098,<br \/>\n\uc880 \ub354 \ubcf5\uc7a1\ud55c \uad6c\ud604\uc774 \ub4e4\uc5b4\uac00 \uc788\ub294 \uac1d\uccb4\ub97c \uc9c0\uce6d\ud55c\ub2e4.<br \/>\n&nbsp;<br \/>\nfake \uac1d\uccb4\ub294 \ubcf5\uc7a1\ud55c \ub85c\uc9c1\uc774\ub098, \uac1d\uccb4 \ub0b4\ubd80\uc5d0\uc11c \ud544\uc694\ub85c \ud558\ub294 \ub2e4\ub978 \uc678\ubd80 \uac1d\uccb4\ub4e4\uc758 \ub3d9\uc791\uc744<br \/>\n\ube44\uad50\uc801 \ub2e8\uc21c\ud654\ud558\uc5ec \uad6c\ud604\ud55c \uac1d\uccb4\ub2e4.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<b>4. Spy<\/b><br \/>\n\ud14c\uc2a4\ud2b8\uc5d0\uc11c \ud2b9\uc815 \uac1d\uccb4\uac00 \uc0ac\uc6a9\ub410\ub294\uc9c0,<br \/>\n\uadf8\ub9ac\uace0 \uadf8 \uac1d\uccb4\uc758 \uc608\uc0c1\ub41c \uba54\uc18c\ub4dc\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ud638\ucd9c\ub410\ub294\uc9c0\ub97c \ud655\uc778\ud574\uc57c \ud558\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud55c\ub2e4.<br \/>\n&nbsp;<br \/>\n\ubcf4\ud1b5\uc740 \ud638\ucd9c \uc5ec\ubd80\ub97c \ubab0\ub798 \uac10\uc2dc\ud574\uc11c \uae30\ub85d\ud588\ub2e4\uac00,<br \/>\n\ub098\uc911\uc5d0 \uc694\uccad\uc774 \ub4e4\uc5b4\uc624\uba74 \ud574\ub2f9 \uae30\ub85d \uc815\ubcf4\ub97c \uc804\ub2ec\ud574\uc900\ub2e4.<br \/>\n\ud2b9\uc815 \uba54\uc18c\ub4dc\uc758 \uc815\uc0c1 \ud638\ucd9c \uc5ec\ubd80 \ud655\uc778\uc744 \ubaa9\uc801\uc73c\ub85c \uad6c\ud604\ub418\uba70,\u00a0dummy\ubd80\ud130 fake \uac1d\uccb4\uc5d0 \uc774\ub974\uae30\uae4c\uc9c0<br \/>\n\ud14c\uc2a4\ud2b8 \ub354\ube14\ub85c \uad6c\ud604\ub41c \uac1d\uccb4 \uc804 \ubc94\uc704\uc5d0 \uac78\uccd0 \ud574\ub2f9 \uae30\ub2a5\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub2e4.<br \/>\n&nbsp;<br \/>\nstub\uacfc \uc720\uc0ac\ud558\uc9c0\ub9cc \uba64\ubc84\ub97c \ud638\ucd9c\ud558\uae30 \uc704\ud55c \uc778\uc2a4\ud134\uc2a4\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc81c\uacf5\ud55c\ub2e4\ub294 \uc810\uc5d0\uc11c \ucc28\uc774\uac00 \uc788\ub2e4.<br \/>\n\uc608\uc0c1\ub300\ub85c \uba64\ubc84\uac00 \ud638\ucd9c\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\ub3c4\ub85d \ud638\ucd9c\ud574\uc57c \ud560 \uba64\ubc84\ub3c4 \uae30\ub85d\ud55c\ub2e4.<br \/>\n&nbsp;<br \/>\n\uc608)<\/p>\n<pre class=\"lang:java decode:true\">public class SpyCoupon implements ICoupon {\n\u00a0 \u00a0 private int isAppliableCallCount;\n\u00a0 \u00a0 @Override\n\u00a0 \u00a0 public boolean isAppliable(Item item) {\n\u00a0 \u00a0 \u00a0 \u00a0\u00a0isAppliableCallCount++; \/\/ \ud638\ucd9c\ub418\uba74 \uc99d\uac00\n\u00a0 \u00a0 \u00a0 \u00a0 if(item.getCategory().equals('\ud6c4\ub77c\uc774\ud32c')) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return true;\n\u00a0 \u00a0 \u00a0 \u00a0 }else if(item.getCategory().equals('\uc2dc\uacc4')) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return false\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0 \u00a0 \/\/ spy \uae30\ub2a5\uc744 \uc704\ud574 \uc784\uc758 \ucd94\uac00\ud55c \uba54\uc18c\ub4dc.\n\u00a0 \u00a0 public int getIsAppliableCallCount() {\n\u00a0 \u00a0 \u00a0 \u00a0 return this.isAppliableCallCount; \/\/ isAppliable \ud568\uc218\uac00 \uba87\ubc88 \ud638\ucd9c\ub418\uc5c8\ub294\uc9c0\ub97c \ubc18\ud658\n\u00a0 \u00a0 }\n}<\/pre>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n\uc77c\ubc18\uc801\uc73c\ub85c \ud14c\uc2a4\ud2b8 spy\ub294 \uc544\uc8fc \ud2b9\uc218\ud55c \uacbd\uc6b0\ub97c \uc81c\uc678\ud558\uace0 \uc798 \uc4f0\uc774\uc9c0 \uc54a\ub294\ub2e4.<br \/>\n\ubcf4\ud1b5\uc740 \ud14c\uc2a4\ud2b8 spy\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\uc5d0\ub3c4 Mock \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc774\uc6a9\ud558\ub294 \uac83\uc774 \ub354 \ud3b8\ud558\uae30 \ub54c\ubb38\uc774\ub2e4.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<b>&#8211; 5. Mock<\/b><br \/>\n\ud14c\uc2a4\ud2b8\uc5d0 \ub530\ub978 \ubd84\ub958<\/p>\n<ul>\n<li>\uc0c1\ud0dc \uae30\ubc18 \ud14c\uc2a4\ud2b8(state base test) :<br \/>\n\uac1d\uccb4\uac00 \ud2b9\uc815 \uc2dc\uc810\uc5d0 \uc790\uc2e0\ub9cc\uc758 \uc0c1\ud0dc\ub97c \uac16\ub294 \ud2b9\uc9d5\uc5d0 \uae30\ubc18\ud55c \ud14c\uc2a4\ud2b8 \ubc29\uc2dd.<br \/>\n\uac1d\uccb4.setName(&#8216;\ubcf4\ub77c\ub3cc\uc774&#8217;) \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud588\uc73c\uba74, getName() \uba54\uc18c\ub4dc\ub85c \ud655\uc778\ud574\ubcf4\ub294 \uc2dd\uc774\ub2e4.<br \/>\n&nbsp;<\/li>\n<li>\ud589\uc704 \uae30\ubc18 \ud14c\uc2a4\ud2b8(behavior base test) :<br \/>\n\uc62c\ubc14\ub978 \ub85c\uc9c1 \uc218\ud589\uc5d0 \ub300\ud55c \ud310\ub2e8\uc758 \uadfc\uac70\ub85c, \ud2b9\uc815\ud55c \ub3d9\uc791\uc758 \uc218\ud589 \uc5ec\ubd80\ub97c \uc774\uc6a9\ud55c\ub2e4.<br \/>\n\ubcf4\ud1b5\uc740 \uba54\uc18c\ub4dc\uc758 \ub9ac\ud134\uac12\uc774 \uc5c6\uac70\ub098(void \uba54\uc18c\ub4dc), \ub9ac\ud134\uac12\uc744 \ud655\uc778\ud558\ub294 \uac83\ub9cc\uc73c\ub85c\ub294 \uc608\uc0c1\ub300\ub85c \ub3d9\uc791\ud588\uc74c\uc744 \ubcf4\uc99d\ud558\uae30 \uc5b4\ub824\uc6b4 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n\uba54\uc18c\ub4dcA\uac00 \uc815\uc0c1 \ub3d9\uc791\ud588\uc744 \uacbd\uc6b0 \uba54\uc18c\ub4dcB\uac00 \ubc18\ub4dc\uc2dc \ud638\ucd9c\ub418\ub294 \uad6c\uc131\uc774\ub77c\uba74,<br \/>\n\ubc18\ub300\ub85c \uba54\uc18c\ub4dcB\uc758 \ud638\ucd9c \uc5ec\ubd80\ub85c \uba54\uc18c\ub4dcA\uc758 \uc815\uc0c1 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud560 \uc218 \uc788\ub2e4\uace0 \ubcf4\ub294 \uac83\uc774\ub2e4.<br \/>\n\ub530\ub77c\uc11c, \uc774\ub7f4 \ub54c\ub294 \uba54\uc18c\ub4dcB\uc758 \ud638\ucd9c \uc5ec\ubd80\ub97c \ud655\uc778\ud558\ub294 \uac83\uc774 \ud14c\uc2a4\ud2b8 \uc2dc\ub098\ub9ac\uc624\uc758 \uc885\ub8cc \uc870\uac74\uc774 \ub41c\ub2e4.<br \/>\n&nbsp;<br \/>\n\ucd08\ucc3d\uae30\uc5d0 \ub098\uc628 Mock \ud504\ub808\uc784\uc6cc\ud06c\ub4e4\uc740 \ud0dc\uc0dd \uc790\uccb4\uac00<br \/>\n\uc774\ub7f0 \ud589\uc704 \uae30\ubc18 \ud14c\uc2a4\ud2b8\ub97c \uc9c0\uc6d0\ud574\uc8fc\uae30 \uc704\ud574\uc11c\uc778 \uacbd\uc6b0\uac00 \ub300\ub2e4\uc218\uc600\ub2e4.<br \/>\n&nbsp;<br \/>\n\uc77c\uc0c1\uc5d0\uc11c\ub294 &#8216;\ud14c\uc2a4\ud2b8 \ub354\ube14&#8217;\uc774\ub780 \ub2e8\uc5b4\uc640 &#8216;Mock \uac1d\uccb4&#8217;\ub77c\ub294 \ub2e8\uc5b4\uac00<br \/>\n\uac70\uc758 \ub3d9\ub4f1\ud55c \uc758\ubbf8\ub85c \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\uac00 \ub354 \ub9ce\uc558\ub2e4.<br \/>\n&nbsp;<br \/>\nstub, spy, fake\ub294 \uad6c\ubd84\ud558\uae30\uac00 \ub2e4\uc18c \ubaa8\ud638\ud558\ub2e4.<br \/>\nmock\uc740 \ub9e4\uc6b0 \ubcf5\uc7a1\ud558\uae30\ub3c4 \ub2e8\uc21c\ud560 \uc218\ub3c4 \uc788\uae30 \ub54c\ubb38\uc5d0<br \/>\n\uacbd\uc6b0\uc5d0 \ub530\ub77c dummy, stub, spy, fake \ubc94\uc704\uc5d0 \uac78\uccd0 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud14c\uc2a4\ud2b8 \ub354\ube14(test double) \ud14c\uc2a4\ud2b8 \uc791\uc131\uc2dc, \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\uc640 \uc0c1\ud638\uc791\uc6a9\ud558\ub294 \uac1d\uccb4 &nbsp; \ud14c\uc2a4\ud2b8 \ub354\ube14\uc758 \uc5ed\ud560 \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\ub97c \uaca9\ub9ac\ud55c\ub2e4. \ud14c\uc2a4\ud2b8 \uc18d\ub3c4\ub97c \uac1c\uc120\ud55c\ub2e4. \uc608\uce21\ubd88\uac00\ub2a5\ud55c \uc2e4\ud589 \uc694\uc18c\ub97c \uc81c\uac70\ud55c\ub2e4. \ud2b9\uc218\ud55c \uc0c1\ud669\uc744 \uc2dc\ubbac\ub808\uc774\uc158\ud55c\ub2e4. \uac10\ucdb0\uc9c4 \uc815\ubcf4\ub97c \uc5bb\uc5b4\ub0b8\ub2e4. &nbsp; &nbsp; \ud14c\uc2a4\ud2b8 \ub354\ube14\uc758 \uc885\ub958 1. Dummy \uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \ud14c\uc2a4\ud2b8 \ub354\ube14 \uc720\ud615. \uad6c\ud604\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uace0,\u00a0\uc8fc\ub85c \ub9e4\uac1c \ubcc0\uc218 \uac12\uc73c\ub85c\ub9cc [&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":[3],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/167"}],"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=167"}],"version-history":[{"count":0,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/167\/revisions"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}