๐Ÿ’ Spring

๐Ÿ’ Spring

[JUnit] - JUnit5 ์‹œ์ž‘ํ•˜๊ธฐ

JUnit์ด๋ž€? ์ž๋ฐ”์šฉ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test) ๋„๊ตฌ ์žฅ์  ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ผํžˆ System.out.prinlnt ๋กœ ์ฐ์–ด๋ณผ ํ•„์š”๊ฐ€ ์—†๋‹ค. @Test ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋‹จ์ •(assert) ๋ฉ”์†Œ๋“œ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์‹œ์ž‘ ํ•˜๊ธฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ IntelliJ IDEA (2020.2.4) JDK 1.8 JUnit 5 Maven Dependency org.junit.jupiter junit-jupiter-api 5.7.0 test mvnrepository.com/search?q=junit Maven Repository: junit Module "junit-jupiter-a..

๐Ÿ’ Spring

Github - Personal Access Token ๋ฐ›๋Š” ๋ฒ•

Personal Access Token Github ์ ‘์† - profile - Settings Settings / Developer settings / Personal access tokens ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— Generate new token์„ ํด๋ฆญํ•ด์ค€๋‹ค. Note ์—๋Š” ์ด ํ† ํฐ์€ ๋ฌด์—‡์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š”์ง€๋ฅผ ๋ฉ”๋ชจํ•˜๋Š” ๊ฒƒ์ด๊ตฌ, ์•„๋ž˜ scopes๋Š” repo๋งŒ ์ฒดํฌํ•ด์ฃผ๊ณ  ์•„๋ž˜์— Generate Token์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค. ์ด๋Ÿฌ๋ฉด ๋! ์ด์ œ ํ† ํฐ์„ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด ํ† ํฐ์€ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์—†์œผ๋‹ˆ ์บก์ฒ˜ํ•˜๊ฑฐ๋‚˜ ์–ด๋”” ์ ์–ด๋‘๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

๐Ÿ’ Spring

Github API - Repository ์—ฐ๋™ํ•ด์„œ Issue์— Comments ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

Github API ์‚ฌ์šฉ ํ•˜๊ธฐ github-api.kohsuke.org/index.html GitHub API for Java – What is this? This library defines an object oriented representation of the GitHub API. By "object oriented" we mean there are classes that correspond to the domain model of GitHub (such as GHUser and GHRepository), operations that act on them as defined a github-api.kohsuke.org ์œ„ ํŽ˜์ด์ง€๋ฅผ ๋“ค์–ด๊ฐ€๋ณด๋ฉด, ์Œ....... ์‹œ์ž‘๋ถ€ํ„ฐ ๋ง‰๋ง‰ํ•˜๋‹ค. ์‹œ์ž‘์— ์•ž์„œ Down..

๐Ÿ’ Spring/Spring REST API

7) [test] @JUnitParams ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง - ์Šคํ”„๋ง REST API

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ ์šฉ ๋๋Š”์ง€ ์‘๋‹ต ๋ฉ”์‹œ์ง€ ํ™•์ธ offline ๊ณผ free ๊ฐ’ ํ™•์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ผ๋‹จ offline์€ location์— ๊ฐ’์ด ๋“ค์–ด์žˆ์œผ๋ฉด ์˜คํ”„๋ผ์ธ์ด๊ณ , ๊ฐ’์ด ์—†์œผ๋ฉด ์˜จ๋ผ์ธ์œผ๋กœ ์ง„ํ–‰์ด ๋œ๋‹ค. free๊ฐ’์€ basePrice์™€, MaxPrice๊ฐ€ ๋‘˜ ๋‹ค 0์ผ๋•Œ , free ์ด๋‹ค. Event.class ๋„๋ฉ”์ธ ํด๋ž˜์Šค์—๋‹ค๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ ์šฉ์‹œ์ผœ์ค€๋‹ค. public void update() { this.free = (basePrice == 0) && (maxPrice == 0); this.offline = location != null; } EventTests.class @Test public void testOffine() { // Given Event event = Event.builder() ...

๐Ÿ’ Spring/Spring REST API

6) [test] Bad_Request ์‘๋‹ต ๋ณธ๋ฌธ ๋งŒ๋“ค๊ธฐ - ์Šคํ”„๋ง REST API

์ด๋ฒˆ์— ํ•  ๊ฒƒ์€ Bad Request ์‘๋‹ต ๋ณธ๋ฌธ ๋งŒ๋“ค๊ธฐ ์ด๋‹ค. EventController ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, @PostMapping public ResponseEntity createEvent(@RequestBody @Valid EventDto eventDto, Errors errors) { //@Valid ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค๋ฉด, ์˜์กด์„ฑ ์ถ”๊ฐ€ : spring-boot-starter-validation ์„ ํ•ด์ค€๋‹ค. if (errors.hasErrors()) { return ResponseEntity.badRequest().build(); } eventValidator.validate(eventDto, errors); if (errors.hasErrors()) { return ResponseEntity.badReq..

๐Ÿ’ Spring/Spring REST API

5) [test] ์ž…๋ ฅ๊ฐ’ ์ œํ•œํ•˜๊ธฐ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ๊ฒ€์‚ฌ) - ์Šคํ”„๋ง REST API

@Valid ์™€ BindingResult (๋˜๋Š” Errors) BindingResult ๋Š” ํ•ญ์ƒ @Valid ๋ฐ”๋กœ ๋‹ค์Œ ์ธ์ž๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ (์Šคํ”„๋ง MVC) @NotNull, @NotEmpty, @Min, @Max ... ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ๊ฐ’ ๋ฐ”์ธ๋”ฉ ํ• ๋•Œ ์—๋Ÿฌ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ๋„๋ฉ”์ธ Validator ๋งŒ๋“ค๊ธฐ Validator ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด ๋งŒ๋“ค์–ด๋„ ์ƒ๊ด€์—†๋‹ค. @Component public class EventValidator { public void validate(EventDto eventDto, Errors errors) { if (eventDto.getBasePrice() > eventDto.getMaxPrice() && eventDto.getMaxPrice() != 0) { errors.reject..

iseunghan
'๐Ÿ’ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (7 Page)