[OptimistLabyrinth] ๐ 1๋จ๊ณ - ํ ์คํธ๋ฅผ ํตํ ์ฝ๋ ๋ณดํธ#641
[OptimistLabyrinth] ๐ 1๋จ๊ณ - ํ
์คํธ๋ฅผ ํตํ ์ฝ๋ ๋ณดํธ#641OptimistLabyrinth wants to merge 10 commits intonext-step:optimistlabyrinthfrom
Conversation
๋งํฌ๋ค์ด ๋ฌธ๋ฒ ์ฌ์ฉํด์ ํ(ํ ์ด๋ธ)๋ก ์ ๋ฆฌ
geunhwanlee
left a comment
There was a problem hiding this comment.
์๊ตฌ์ฌํญ ์ ํ์ ํด์ฃผ์ จ์ด์! ๐๐ป
์์ํ ์ฝ๋ฉํธ ๋๋ ธ์ผ๋ ํ์ธํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๐
ํ ์คํธ์ฝ๋๋ฅผ ์์ง ์์ฑํ์ง ์์ผ์ ์ Request changes ์ํ๋ก ๋๋ ค๋์๊ฒ์.
๊ทธ๋ผ ์์ ํ ์ฌ ๋ฆฌ๋ทฐ์์ฒญ ์ฃผ์ธ์!
ํ์ดํ
ํ์ธ์. ๐ฅ
| ### ์ํ ์์ฑํ๊ธฐ (POST /api/products) | ||
|
|
||
| - HTTP Response Code : 201 CREATED | ||
| - ๊ฐ๊ฒฉ | ||
| - ๊ฐ๊ฒฉ์ ๋ฐ๋์ ์์ด์ผ ํ๋ค | ||
| - ๊ฐ๊ฒฉ์ 0 ์ด์์ ์ ์์ฌ์ผ ํ๋ค. | ||
|
|
||
| ### ์ํ ๋ฆฌ์คํธ ์กฐํ (GET /api/products) | ||
|
|
||
| - HTTP Response Code : 200 OK |
There was a problem hiding this comment.
| ### ์ํ ์์ฑํ๊ธฐ (POST /api/products) | |
| - HTTP Response Code : 201 CREATED | |
| - ๊ฐ๊ฒฉ | |
| - ๊ฐ๊ฒฉ์ ๋ฐ๋์ ์์ด์ผ ํ๋ค | |
| - ๊ฐ๊ฒฉ์ 0 ์ด์์ ์ ์์ฌ์ผ ํ๋ค. | |
| ### ์ํ ๋ฆฌ์คํธ ์กฐํ (GET /api/products) | |
| - HTTP Response Code : 200 OK | |
| - `์ํ`์ ๋ฑ๋กํ ์ ์๋ค | |
| - `์ํ`์ ๊ฐ๊ฒฉ์ 0์ ์ด์์ด์ด์ผ ํ๋ค | |
| - `์ํ`์ ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค |
๊ฐ๋ฐ์๊ฐ ์๋ ์ฌ๋๋ค๋ ์ดํดํ ์ ์๋ ์ธ์ด๋ก ์์ฑํด๋ณด๋ฉด ์ข์๊ฒ๊ฐ๋ค์!
์ ์์๋ ์ฐธ๊ณ ๋ง ๋ถํ๋๋ ค์ ๐
README.md
Outdated
| - ๋ฉ๋ด ๊ทธ๋ฃน์ด ์ค์ ๋ก ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฉ๋ด๋ฅผ ์์ฑํ ์ ์๋ค. | ||
| - ์ํ ๋ฆฌ์คํธ | ||
| - ํ๋์ ์ํ์ด๋ผ๋ ์ค์ ๋ก ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฉ๋ด๋ฅผ ์์ฑํ ์ ์๋ค. | ||
| - ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ ํญ์ ๋ชจ๋ ์ํ ๊ฐ๊ฒฉ์ ์ดํฉ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค. |
There was a problem hiding this comment.
| - ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ ํญ์ ๋ชจ๋ ์ํ ๊ฐ๊ฒฉ์ ์ดํฉ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค. | |
| - ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ ๋ชจ๋ ๋ฉ๋ด ์ํ์ ๊ธ์ก์ ํฉ์ ์ด๊ณผํ ์ ์๋ค |
์ฉ์ด์ฌ์ ์ ์ฉ์ด๋ฅผ ํ์ฉํด์ ์์ฑํ๋ฉด ์ข์๊ฒ ๊ฐ๋ค์! ๐
๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ์ ์ผ๋ก๋ ์๊ฑฐ๋ ๊ฐ๋ค๋ณด๋ค๋ ์ด๊ณผํ ์ ์๋ค์ ๊ฐ์ด ํ ๋จ์ด๋ก ํํํ๋๊ฒ ๋ซ์ง ์์๊น ์๊ฐํด์.
README.md
Outdated
| ### ๋ฉ๋ด ์์ฑํ๊ธฐ (POST /api/menus) | ||
|
|
||
| - HTTP Response Code : 201 CREATED | ||
| - ๊ฐ๊ฒฉ | ||
| - ๊ฐ๊ฒฉ์ ๋ฐ๋์ ์์ด์ผ ํ๋ค | ||
| - ๊ฐ๊ฒฉ์ 0 ์ด์์ ์ ์์ฌ์ผ ํ๋ค. | ||
| - ๋ฉ๋ด ๊ทธ๋ฃน | ||
| - ๋ฉ๋ด ๊ทธ๋ฃน์ด ์ค์ ๋ก ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฉ๋ด๋ฅผ ์์ฑํ ์ ์๋ค. | ||
| - ์ํ ๋ฆฌ์คํธ | ||
| - ํ๋์ ์ํ์ด๋ผ๋ ์ค์ ๋ก ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฉ๋ด๋ฅผ ์์ฑํ ์ ์๋ค. | ||
| - ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ ํญ์ ๋ชจ๋ ์ํ ๊ฐ๊ฒฉ์ ์ดํฉ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค. |
There was a problem hiding this comment.
๋ฉ๋ด์๋ ์ฌ๋ฌ ๋ฉ๋ด ์ํ์ ๋ฑ๋กํ ์ ์๋ค์ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ์ถ๊ฐํด๋ณด๋๊ฑด ์ด๋จ๊น์? ๐ค
README.md
Outdated
|
|
||
| - HTTP Response Code : 201 CREATED | ||
| - ์ฃผ๋ฌธ ํญ๋ชฉ ๋ฆฌ์คํธ | ||
| - ์ฃผ๋ฌธ ํญ๋ชฉ์ด ๋ฐ๋์ 1 ๊ฐ ์ด์์ด์ด์ผ ํ๋ค. |
There was a problem hiding this comment.
| - ์ฃผ๋ฌธ ํญ๋ชฉ์ด ๋ฐ๋์ 1 ๊ฐ ์ด์์ด์ด์ผ ํ๋ค. | |
| - ์ฃผ๋ฌธ ํญ๋ชฉ์ ํ์์ด๋ค |
์ด๋ ๊ฒ ํํํ๋๊ฑด ์ด๋ค๊ฐ์? ๐
README.md
Outdated
| ### ์ฃผ๋ฌธ ์์ฑํ๊ธฐ (POST /api/orders) | ||
|
|
||
| - HTTP Response Code : 201 CREATED | ||
| - ์ฃผ๋ฌธ ํญ๋ชฉ ๋ฆฌ์คํธ | ||
| - ์ฃผ๋ฌธ ํญ๋ชฉ์ด ๋ฐ๋์ 1 ๊ฐ ์ด์์ด์ด์ผ ํ๋ค. | ||
| - ๋ชจ๋ ๋ฉ๋ด ์ค์ ๋ก ํ์ธ | ||
| - ํ๋์ ๋ฉ๋ด๋ผ๋ ์ค์ ๋ก ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ฃผ๋ฌธ์ ์์ฑํ ์ ์๋ค. | ||
| - ์ฃผ๋ฌธ ํ ์ด๋ธ์ด ์ค์ ๋ก ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ฃผ๋ฌธ์ ์์ฑํ ์ ์๋ค. | ||
|
|
||
| ### ์ฃผ๋ฌธ ๋ฆฌ์คํธ ์กฐํํ๊ธฐ (GET /api/orders) | ||
|
|
||
| - HTTP Response Code : 200 OK | ||
|
|
||
| ### ์ฃผ๋ฌธ ์ํ ๋ณ๊ฒฝํ๊ธฐ (PUT /api/orders/{orderId}/order-status) | ||
|
|
||
| - HTTP Response Code : 200 OK | ||
| - ์ฃผ๋ฌธ ์์ด๋ | ||
| - ์กด์ฌํ์ง ์๋ ์ฃผ๋ฌธ์ ๋ํด์ ์ํ ๋ณ๊ฒฝ์ ์์ฒญํ ์ ์๋ค. | ||
| - ์ด์ ์ ์ฃผ๋ฌธ ์ํ | ||
| - ์ด์ ์ ์ฃผ๋ฌธ ์ํ๊ฐ "๊ณ์ฐ ์๋ฃ" ๋ผ๋ฉด ์ํ ๋ณ๊ฒฝ์ ์์ฒญํ ์ ์๋ค. |
There was a problem hiding this comment.
์ฃผ๋ฌธํ
์ด๋ธ์ด ๋น ํ
์ด๋ธ์ด๋ฉด ์ฃผ๋ฌธํ ์ ์๋ค ์ด ๋ด์ฉ์ด ๋น ์ง๊ฒ๊ฐ๋ค์!
๋ํ ์ฃผ๋ฌธ ์์ฑ์ ์ฃผ๋ฌธ ์ํ๊ฐ ์กฐ๋ฆฌ์ธ๊ฒ๋ ํํํด์ฃผ๋ฉด ์ข์๊ฒ๊ฐ์์. ๐
README.md
Outdated
| ## ํ ์ด๋ธ ์์ฑ (POST /api/tables) | ||
|
|
||
| - HTTP Response Code : 201 CREATED | ||
| - ์๋ก์ด ํ ์ด๋ธ์ ์์ฑํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์ด๋ธ ๊ทธ๋ฃน ์์ด๋๋ null ๋ก ์ด๊ธฐํํ๋ค. |
There was a problem hiding this comment.
ํ ์ด๋ธ ๊ทธ๋ฃน ์์ด๋๊ฐ null์ด๋ผ๋๊ฑด ์ด๋ค ํํ์ผ๋ก ๋ฐ๊ฟ๋ณผ์ ์์๊น์? ๐ค
README.md
Outdated
| - HTTP Response Code : 200 OK | ||
| - ์ฃผ๋ฌธ ํ ์ด๋ธ ์์ด๋ | ||
| - ์ฃผ๋ฌธ ํ ์ด๋ธ์ด ์ค์ ๋ก ์กด์ฌํ์ง ์์ผ๋ฉด ๋น ํ ์ด๋ธ๋ก ํ์ํ ์ ์๋ค. | ||
| - ์ฃผ๋ฌธ ํ ์ด๋ธ์ด ํ ์ด๋ธ ๊ทธ๋ฃน์ ํฌํจ๋์ด ์๋ค๋ฉด ๋น ํ ์ด๋ธ๋ก ํ์ํ ์ ์๋ค. |
There was a problem hiding this comment.
| - ์ฃผ๋ฌธ ํ ์ด๋ธ์ด ํ ์ด๋ธ ๊ทธ๋ฃน์ ํฌํจ๋์ด ์๋ค๋ฉด ๋น ํ ์ด๋ธ๋ก ํ์ํ ์ ์๋ค. | |
| - ๋จ์ฒด ์ง์ ๋ ์ฃผ๋ฌธ ํ ์ด๋ธ์ ๋น ํ ์ด๋ธ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. |
์ด๋ ๊ฒ ํํํ๋๊ฑด ์ด๋ค๊ฐ์?
90f8335 to
23d9850
Compare
|
์์์ ์ ์ ์๊ตฌ์ฌํญ ๋ถ์์ ๋ํด์ ๋ฆฌ๋ทฐํด์ฃผ์ ํผ๋๋ฐฑ๋ ๋ฐ์ํ์ต๋๋ค ใ ใ ๊ทธ๋ฐ๋ฐ |
geunhwanlee
left a comment
There was a problem hiding this comment.
1๋จ๊ณ ํ ์คํธ์ฝ๋ ์ ์์ฑํด์ฃผ์ จ์ด์! ๐๐ป
๋ค๋ง ๋ช๊ฐ์ง ์์ฌ์ด ์ ์ด ์์ด ์ฝ๋ฉํธ ๋จ๊ฒผ์ต๋๋ค. ๐ญ
๋ชจํน์ ์ฌ์ฉํ ๊ฒฉ๋ฆฌํ
์คํธ๋
Service๊ฐ ์์กดํ๊ณ ์๋ ํ
์คํธํ๊ธฐ ์ด๋ ค์ด ๊ฐ์ฒด๋ค์ Mock๊ฐ์ฒด๋ก ๋ชจํนํ๊ณ
Service์ ์กด์ฌํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ํ
์คํธํ๊ธฐ ์ํด ์์ฑํ๋๊ฑฐ๋ผ๊ณ ์๊ฐํด์. ๐
๊ทธ๋ฌํ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ํ ์คํธ๋ฅผ ์์ฑํ์ ๋ค๋ฉด ๋ฌด์๋ฏธํ๋ค๊ณ ๋๋ผ์ง ์์๊ฑฐ๊ฐ์์ ๐๐ป
๋ค๋ง ํ
์คํธ๋ฅผ ์์ฑํ์ค๋ ๊ต์ฅํ ๋ณต์กํ๋ค๊ณ ๋๋ผ์
จ์๊ฒ ๊ฐ์๋ฐ์
๊ทธ๊ฒ๊ณผ ๊ด๊ณ๋(?) ๋ด์ฉ์ ์ฝ๋ฉํธ๋ก ๋จ๊ฒผ์ผ๋ ํ๋ฒ ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข์๊ฒ๊ฐ์์!
์งํํ๋ค ์ด๋ ค์ด ์ ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ฐ๋ฝ์ฃผ์ธ์.
๊ทธ๋ผ ํ๋ฒ ์๋ํด๋ณด์๊ณ ์ฌ ๋ฆฌ๋ทฐ์์ฒญ ์ฃผ์ธ์ ๐
ํ์ดํ
ํ์ธ์! ๐ฅ
| private MenuGroup setupSuccess(String name) { | ||
| final MenuGroup mockMenuGroup = new MenuGroup(); | ||
| mockMenuGroup.setName("test menu group"); |
There was a problem hiding this comment.
| private MenuGroup setupSuccess(String name) { | |
| final MenuGroup mockMenuGroup = new MenuGroup(); | |
| mockMenuGroup.setName("test menu group"); | |
| private MenuGroup setupSuccess(String name) { | |
| final MenuGroup mockMenuGroup = new MenuGroup(); | |
| mockMenuGroup.setName(name); |
๋น ํธ๋ฆฌ์ ๊ฒ ๊ฐ์์ ๐
| private MenuGroup setupSuccess(String name) { | ||
| final MenuGroup mockMenuGroup = new MenuGroup(); | ||
| mockMenuGroup.setName("test menu group"); | ||
| Mockito.when(menuGroupDao.save(Mockito.any())).thenReturn(mockMenuGroup); |
There was a problem hiding this comment.
| Mockito.when(menuGroupDao.save(Mockito.any())).thenReturn(mockMenuGroup); | |
| BDDMockito.given(menuGroupDao.save(Mockito.any())).willReturn(mockMenuGroup); |
BDDMockito๋ฅผ ์ฌ์ฉํ๋ฉด given when then ์คํ์ผ์ ๋ง๊ฒ ์์ฑํ ์ ์์ด์ ๐
| final Product product = new Product(); | ||
| product.setId(productId); | ||
| product.setPrice(BigDecimal.valueOf(100 * productId)); |
There was a problem hiding this comment.
| final Product product = new Product(); | |
| product.setId(productId); | |
| product.setPrice(BigDecimal.valueOf(100 * productId)); | |
| final Product product = new Product(productId, BigDecimal.valueOf(100 * productId)); |
๋๋ฉ์ธ ํด๋์ค์ ์์ฑ์๋ฅผ ์์ ํ๋ฉด ๋ ๊ฐ๋ตํ๊ฒ ์์ฑํ ์ ์๊ฒ ๋ค์ ๐
| final List<MenuProduct> menuProducts = new ArrayList<>(); | ||
| for (int i = 0; i < products.size(); ++i) { | ||
| final Product product = products.get(i); | ||
| final MenuProduct menuProduct = new MenuProduct(); | ||
| menuProduct.setSeq((long) i + 1); | ||
| menuProduct.setMenuId(menuId); | ||
| menuProduct.setProductId(product.getId()); | ||
| menuProduct.setQuantity(product.getId() - 10); | ||
| menuProducts.add(menuProduct); | ||
| } |
There was a problem hiding this comment.
ํ
์คํธ ํฝ์ค์ฒ๋ฅผ ๋ง๋๋๋ฐ ๋ณต์กํ ์ฝ๋๊ฐ ๋ค์ด๊ฐ์ ๊ฐ๋
์ฑ์ด ๋ฎ์์ง๋๊ฒ๊ฐ์์. ๐ญ
์ด๋ป๊ฒ ํ๋ฉด ๊ฐ๋จํ๊ฒ ํฝ์ค์ฒ๋ฅผ ์์ฑํ ์ ์์๊น ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์๊ฒ๊ฐ์์ ๐ค
๋ง์ฝ ๊ฐ๊ฒฉ์ ๋ํ ํ ์คํธ๋ฅผ ํ๋ค๋ฉด
MenuGroup ๋ฉ๋ด๊ทธ๋ฃน1 = menuGroupFixture(5000);
Menu = menuFixture(10000, ๋ฉ๋ด๊ทธ๋ฃน1);์ด๋ฐ์์ผ๋ก ๊ด์ฌ์๋ ๋ฐ์ดํฐ์ธ ๊ฐ๊ฒฉ๋ง ๋๋ฌ๋๋๋ก ์์ฑํ๋๊ฒ๋ ํ ๋ฐฉ๋ฒ์ผ๊ฒ ๊ฐ์์ ๐
| @WebMvcTest(MenuGroupRestController.class) | ||
| public class MenuGroupRestControllerTest { |
There was a problem hiding this comment.
Controller์ ๋ํ ํ ์คํธ๋ ์์ฑํด์ฃผ์ จ๋ค์ ๐๐ป
| private Menu setupBadRequestPriceMoreThanSumOfProductPrice() { | ||
| final Menu menu = new Menu(); | ||
| menu.setName("test menu"); | ||
| menu.setPrice(BigDecimal.valueOf(1500)); | ||
| Mockito.when(menuRestController.create(Mockito.any())).thenReturn(ResponseEntity.badRequest().build()); | ||
| return menu; | ||
| } |
There was a problem hiding this comment.
์ง์ ํ ๋ฉ๋ด ๊ฐ๊ฒฉ์ด ํฌํจํ๊ณ ์๋ ์ํ์ ๊ฐ๊ฒฉ ์ดํฉ๋ณด๋ค ์ปค์ ๋ฉ๋ฅ๋ฅผ ๋ฑ๋กํ์ง ๋ชปํ๋ฉด 400 ์ํ ์ฝ๋๋ฅผ ์๋ต๋ฐ๋๋ค
์ ์กฐ๊ฑด์ ๋ง๊ฒ ํ
์คํธ๊ฐ ๋๊ฑธ๊น์..? ๐ค
์กฐ๊ฑด๊ณผ ์๊ด์์ด bad request๋ฅผ ์๋ตํ๋๊ฑธ๋ก ๋ณด์ด๋ค์. ๐ญ
| @Nested | ||
| @DisplayName("๋ฉ๋ด ๊ฐ๊ฒฉ์ด ํฌํจ๋ ์ํ์ ์ดํฉ๋ณด๋ค ํฌ๋ฉด ๋ฉ๋ด ๋ฑ๋ก ์คํจ") | ||
| public class ErrorMenuPriceExceedsSumOfProductPrice { | ||
| @Test | ||
| public void testCase() { | ||
| // given | ||
| final Menu menu = setup(); | ||
|
|
||
| // when - then | ||
| assertThrows(IllegalArgumentException.class, () -> menuService.create(menu)); | ||
| } |
There was a problem hiding this comment.
๋ณต์กํ ํฝ์ค์ฒ์์ฑ์ setUp() ๋ฉ์๋๋ก ๋ถ๋ฆฌํด๋ธ๊ฑด ์ข์ต๋๋ค. ๐๐ป
๋ค๋ง ๋๋ฌด ๋ง์ ํ๋ฆ์ setUp์ผ๋ก ๋ถ๋ฆฌํด๋๋ค๊ณ ์๊ฐ์ด ๋ค์ด์. ๐ค
๋ฉ๋ด ๊ฐ๊ฒฉ์ด ํฌํจ๋ ์ํ์ ์ดํฉ๋ณด๋ค ํฌ๋ฉด ๋ฉ๋ด ๋ฑ๋ก ์คํจ ์กฐ๊ฑด์ ํ
์คํธํ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์
ํ
์คํธ์ฝ๋์ ํ๋ฆ์ ๋ณด๊ณ ๋ ์ ์กฐ๊ฑด์ ํ
์คํธํ๋์ง ์ฝ๊ฒ ์์ ์์ด์ผํด์.
๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด์ ํ
์คํธ์ ํ๋ฆ์์ ๊ฐ๊ฐ์ ์ํ์ ๊ฐ๊ฒฉ๊ณผ ๋ฉ๋ด๊ฐ๊ฒฉ์ด ๋๋ฌ๋์ผํ๊ณ
๋ฉ๋ด๊ฐ๊ฒฉ์ด ์ํ๊ฐ๊ฒฉ์ ์ดํฉ๋ณด๋ค ํฌ๋ค๋๊ฒ ๋๋ฌ๋์ผํฉ๋๋ค.
์ด๋ป๊ฒ ์์ฑํด์ผํ ์ง ํ๋ฒ ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข์๊ฒ๊ฐ๋ค์ ๐
๋งํฌ๋ค์ด ๋ฌธ๋ฒ ์ฌ์ฉํด์ ํ(ํ ์ด๋ธ)๋ก ์ ๋ฆฌ๊น์ง ์๋ฃํ์ต๋๋ค.
1๋จ๊ณ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์งํํ๊ธฐ์ ์์์
์ ๊ฐ ํ์ ํ ์๊ตฌ์ฌํญ ์ค์ ์๋ชป๋ ๋ถ๋ถ์ด ์๋์ง ์ง๊ณ ๋์ด๊ฐ๊ณ ์ถ์ต๋๋ค.
ํ์ธ ํ์ ํผ๋๋ฐฑ ๋ถํ๋๋ ค๋ ๊ด์ฐฎ์๊น์??