<\/p>\n
JUnit\uacfc Mockito\ub294 \uc790\ubc14 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ub450 \uac00\uc9c0 \uc778\uae30\uc788\ub294 \ud14c\uc2a4\ud305 \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4. JUnit\uc740 \uc790\ubc14 \uac1c\ubc1c\uc790\ub4e4\uc774 \uac00\uc7a5 \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \ud14c\uc2a4\ud305 \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4. \uc774 \ud504\ub808\uc784\uc6cc\ud06c\ub294 \uc790\ub3d9\ud654\ub41c \ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc791\uc131\uc744 \uc9c0\uc6d0\ud558\uba70, \ucf54\ub4dc \ud488\uc9c8\uc744 \ub192\uc774\uace0 \ubc84\uadf8\ub97c \ub354 \uc27d\uac8c \ubc1c\uacac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4. <\/p>\n
Mockito\ub294 JUnit\uacfc \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 \ubaa8\uc758 \uac1d\uccb4(Mock Object) \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. Mockito\ub294 \ud14c\uc2a4\ud2b8 \uc791\uc131 \uc2dc \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \uac1d\uccb4\uc640 \uadf8 \uac1d\uccb4\uac00 \uc758\uc874\ud558\ub294 \uac1d\uccb4\ub4e4\uc758 \ub3d9\uc791\uc744 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\uc758 \uac1d\uccb4\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubaa8\uc758 \uac1d\uccb4\ub294 \uc2e4\uc81c \uac1d\uccb4\uc640 \ub3d9\uc77c\ud55c API\ub97c \uc81c\uacf5\ud558\uba74\uc11c\ub3c4 \ud504\ub85c\uadf8\ub798\uba38\uac00 \uc6d0\ud558\ub294 \ub3d9\uc791\uc744 \uc218\ud589\ud558\ub3c4\ub85d \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n
JUnit\uacfc Mockito\ub294 \uc790\ubc14 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud14c\uc2a4\ud2b8\ud558\ub294 \ub370 \ud544\uc218\uc801\uc778 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc774 \ub458\uc744 \ud568\uaed8 \uc0ac\uc6a9\ud558\uba74 \ud14c\uc2a4\ud2b8 \uc791\uc131\uc758 \uc0dd\uc0b0\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n
\uc790\ubc14 \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub294 \uc790\ubc14 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uac01\uac01\uc758 \ub2e8\uc704(\uba54\uc18c\ub4dc, \ud074\ub798\uc2a4, \uc778\ud130\ud398\uc774\uc2a4)\ub97c \uac1c\ubcc4\uc801\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud14c\uc2a4\ud2b8\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ucf54\ub4dc \ud488\uc9c8\uc744 \ub192\uc774\uace0 \ubc84\uadf8\ub97c \ubc1c\uacac\ud558\ub294 \ub370 \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4. <\/p>\n
\ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub294 \ucf54\ub4dc \ubcc0\uacbd \uc2dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc5ec\uc804\ud788 \uc608\uc0c1\ub300\ub85c \uc791\ub3d9\ud558\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ub370\uc5d0\ub3c4 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ucf54\ub4dc \ubcc0\uacbd\uc73c\ub85c \uc778\ud55c \uc608\uae30\uce58 \uc54a\uc740 \uc0ac\uc774\ub4dc \uc774\ud399\ud2b8\ub97c \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n
\ub610\ud55c, \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub294 \ucf54\ub4dc \ub9ac\ud329\ud1a0\ub9c1 \uc2dc\uc5d0\ub3c4 \ub9e4\uc6b0 \uc720\uc6a9\ud569\ub2c8\ub2e4. \ub9ac\ud329\ud1a0\ub9c1\uc740 \ucf54\ub4dc\uc758 \uad6c\uc870\ub97c \uac1c\uc120\ud558\uba74\uc11c \uae30\ub2a5\uc744 \uc720\uc9c0\ud558\ub294 \uc791\uc5c5\uc73c\ub85c, \uc774\ub97c \ud1b5\ud574 \ucf54\ub4dc\uc758 \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub9ac\ud329\ud1a0\ub9c1\uc740 \ucf54\ub4dc \ubcc0\uacbd\uc73c\ub85c \uc778\ud574 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uae30\ub2a5\uc774 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc744 \uac00\ub2a5\uc131\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub54c \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud558\uc5ec \ubb38\uc81c\ub97c \ubc1c\uacac\ud558\uace0 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n
JUnit\uc744 \uc774\uc6a9\ud55c \ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc791\uc131\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud569\ub2c8\ub2e4. \uba3c\uc800, \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ud074\ub798\uc2a4\uc758 \uba54\uc18c\ub4dc\ub97c \uc791\uc131\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 JUnit\uc758 @Test<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec \uac01\uac01\uc758 \uba54\uc18c\ub4dc\ub97c \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4. <\/p>\n
public class Calculator {\n public int add(int a, int b) {\n return a + b;\n }\n}\n\nimport org.junit.Test;\nimport static org.junit.Assert.assertEquals;\n\npublic class CalculatorTest {\n @Test\n public void testAdd() {\n Calculator calculator = new Calculator();\n int result = calculator.add(2, 3);\n assertEquals(5, result);\n }\n}<\/code><\/pre>\n\uc704 \uc608\uc81c\uc5d0\uc11c\ub294 Calculator<\/code> \ud074\ub798\uc2a4\uc758 add<\/code> \uba54\uc18c\ub4dc\ub97c \ud14c\uc2a4\ud2b8\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. @Test<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc740 \ud574\ub2f9 \uba54\uc18c\ub4dc\uac00 \ud14c\uc2a4\ud2b8 \ub300\uc0c1\uc784\uc744 \ub098\ud0c0\ub0b4\uba70, assertEquals<\/code> \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uc608\uc0c1 \uacb0\uacfc\uc640 \uc2e4\uc81c \uacb0\uacfc\uac00 \uc77c\uce58\ud558\ub294\uc9c0 \uac80\uc99d\ud569\ub2c8\ub2e4. <\/p>\n
Mockito\ub97c \uc774\uc6a9\ud55c \ud14c\uc2a4\ud2b8 \uc791\uc131\uc740 \ub354\uc6b1 \ubcf5\uc7a1\ud569\ub2c8\ub2e4. Mockito\ub97c \uc774\uc6a9\ud558\uc5ec \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \uac1d\uccb4\uc640 \uadf8 \uac1d\uccb4\uac00 \uc758\uc874\ud558\ub294 \uac1d\uccb4\ub4e4\uc758 \ub3d9\uc791\uc744 \ud14c\uc2a4\ud2b8\ud558\ub294 \uac83\uc774 \ubaa9\uc801\uc785\ub2c8\ub2e4. <\/p>\n
public class UserService {\n private UserRepository userRepository;\n\n public UserService(UserRepository userRepository) {\n this.userRepository = userRepository;\n }\n\n public boolean register(User user) {\n if(userRepository.findByUsername(user.getUsername()).isPresent()) {\n return false;\n }\n userRepository.save(user);\n return true;\n }\n}\n\npublic interface UserRepository {\n Optional findByUsername(String username);\n void save(User user);\n}\n\nimport org.junit.Test;\nimport java.util.Optional;\nimport static org.mockito.Mockito.*;\n\npublic class UserServiceTest {\n @Test\n public void testRegister() {\n UserRepository userRepository = mock(UserRepository.class);\n User user = new User(\"test\", \"password\");\n UserService userService = new UserService(userRepository);\n\n when(userRepository.findByUsername(user.getUsername())).thenReturn(Optional.empty());\n userService.register(user);\n\n verify(userRepository, times(1)).save(user);\n }\n}<\/code><\/pre>\n\uc704 \uc608\uc81c\uc5d0\uc11c\ub294 UserService<\/code> \ud074\ub798\uc2a4\uc758 register<\/code> \uba54\uc18c\ub4dc\ub97c \ud14c\uc2a4\ud2b8\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub294 UserRepository<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc758\uc874\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c UserService<\/code>\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574\uc11c\ub294 UserRepository<\/code>\uc758 \ub3d9\uc791\ub3c4 \ud568\uaed8 \ud14c\uc2a4\ud2b8\ud574\uc57c \ud569\ub2c8\ub2e4. <\/p>\n
\uc774\ub97c \uc704\ud574 UserRepository<\/code>\uc758 \ubaa8\uc758 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0, when<\/code> \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \ubaa8\uc758 \uac1d\uccb4\uc758 findByUsername<\/code> \uba54\uc18c\ub4dc\uac00 \ud638\ucd9c\ub420 \ub54c Optional.empty()<\/code>\ub97c \ubc18\ud658\ud558\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 UserService<\/code>\uc758 register<\/code> \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud558\uc5ec UserRepository<\/code>\uc758 save<\/code> \uba54\uc18c\ub4dc\uac00 \ud638\ucd9c\ub418\ub294\uc9c0 \uac80\uc99d\ud569\ub2c8\ub2e4. <\/p>\n
\ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc791\uc131 \uc2dc \uc8fc\uc758\uc810\uacfc \ud6a8\uacfc\uc801\uc778 \ud14c\uc2a4\ud2b8 \ubc29\ubc95<\/h2>\n\ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc791\uc131 \uc2dc \uc8fc\uc758\ud574\uc57c \ud560 \uc810\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n
1. \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\uc640 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\ub97c \ubd84\ub9ac\ud569\ub2c8\ub2e4.<\/h3>\n
\ud14c\uc2a4\ud2b8 \ucf54\ub4dc\ub294 \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\uc640 \ubd84\ub9ac\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\uc758 \ubcc0\uacbd\uc73c\ub85c \uc778\ud574 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uac00 \uc601\ud5a5\uc744 \ubc1b\uc9c0 \uc54a\ub3c4\ub85d \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
2. \ud14c\uc2a4\ud2b8 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/h3>\n
\ud14c\uc2a4\ud2b8 \ub300\uc0c1 \ucf54\ub4dc\ub294 \ud14c\uc2a4\ud2b8 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub85c \uc791\uc131\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \ucf54\ub4dc\uc758 \uc758\uc874\uc131\uc744 \ucd5c\uc18c\ud654\ud558\uace0, \ucf54\ub4dc\ub97c \uc791\uc740 \ub2e8\uc704\ub85c \ubd84\ub9ac\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n
3. \ubaa8\ub4e0 \ucf54\ub4dc \uacbd\ub85c\uc5d0 \ub300\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/h3>\n
\ubaa8\ub4e0 \ucf54\ub4dc \uacbd\ub85c\uc5d0 \ub300\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ucf54\ub4dc \ubcc0\uacbd\uc73c\ub85c \uc778\ud574 \uc0c8\ub85c\uc6b4 \ubc84\uadf8\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
4. \ud14c\uc2a4\ud2b8\ub97c \uc790\uc8fc \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/h3>\n
\ud14c\uc2a4\ud2b8\ub97c \uc790\uc8fc \uc2e4\ud589\ud558\uc5ec \ubc84\uadf8\ub97c \ube60\ub974\uac8c \ubc1c\uacac\ud558\uace0 \uc218\uc815\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n
5. \ud14c\uc2a4\ud2b8\ub97c \uc790\ub3d9\ud654\ud569\ub2c8\ub2e4.<\/h3>\n
\ud14c\uc2a4\ud2b8\ub97c \uc790\ub3d9\ud654\ud558\uc5ec \ud14c\uc2a4\ud2b8 \uc791\uc131\uc758 \uc0dd\uc0b0\uc131\uc744 \ub192\uc774\uace0, \uc77c\uad00\uc131\uc744 \uc720\uc9c0\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n
\ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc791\uc131 \uc2dc \uc774\ub7ec\ud55c \uc8fc\uc758\uc810\uc744 \uc9c0\ucf1c\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ucf54\ub4dc \ud488\uc9c8\uc744 \ub192\uc774\uace0, \ubc84\uadf8\ub97c \ube60\ub974\uac8c \ubc1c\uacac\ud558\uace0 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n
\uacb0\ub860<\/h2>\n
JUnit\uacfc Mockito\ub294 \uc790\ubc14 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud14c\uc2a4\ud2b8\ud558\ub294 \ub370 \ud544\uc218\uc801\uc778 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc774 \ub458\uc744 \uc774\uc6a9\ud558\uc5ec \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba74 \ucf54\ub4dc \ud488\uc9c8\uc744 \ub192\uc774\uace0, \ubc84\uadf8\ub97c \ube60\ub974\uac8c \ubc1c\uacac\ud558\uace0 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc791\uc131 \uc2dc \uc8fc\uc758\ud574\uc57c \ud560 \uc810\uc744 \uc9c0\ucf1c\uc57c \ud558\uba70, \uc774\ub97c \ud1b5\ud574 \ud6a8\uacfc\uc801\uc778 \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"
\uc790\ubc14 \ud14c\uc2a4\ud305 \ud504\ub808\uc784\uc6cc\ud06c: JUnit, Mockito<\/p>\n","protected":false},"author":1,"featured_media":12882,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2119,5898,2105,2433,2188,5932,2144,2029,5979],"class_list":["post-35828","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-api","tag-backend","tag-java","tag-junit","tag-public","tag-spring-boot","tag-web","tag-when","tag-5979"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/35828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/comments?post=35828"}],"version-history":[{"count":1,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/35828\/revisions"}],"predecessor-version":[{"id":35859,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/35828\/revisions\/35859"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/12882"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=35828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=35828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=35828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}