inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

데이터 조회 후 변경 시 쿼리 시점이 어떻게 되나요?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 선생님 질문이 있습니다. 강의 22:00 쯤 변경 감지 듣다가 궁금증이 생겼습니다. 질문은 영속 컨텍스트에 넣지 않은 상태로 DB에서 바로 가져올 땐 커밋 시점 보다 먼저 쿼리가 발생하나요? package hellojpa; import jakarta.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = em.find(Member.class, 450L); member.setName("XXXX"); // em.persist(member); System.out.println("=================="); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } } 출력결과 Hibernate: select m1_ 0.id , m1_ 0.name from Member m1_0 where m1_ 0.id =? ================== Hibernate: /* update for hellojpa.Member */update Member set name=? where id=? 예상 출력 결과는 === select ... update ... 이렇게 나올 줄 알았는데요 왜 이렇게 나오지 않을까요?

  • java
  • jpa
문주영 댓글 1 좋아요 0 조회수 108

목록(페이징)처리구현 - import package 문의

미해결

코드로 배우는 React 19 with 스프링부트 API서버

강의수강중에 Pageable import 관련하여 아래와 같은 Pageable을 선택하니까 오류가 나오더라구요...type unmatch 형태 //import java.awt.print.Pageable; springboot를 사용할 때는 아래와 같은 org.springframework의 형태가 import 우선순위가 되는것이 맞는건가요? import org.springframework.data.domain.Pageable;

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
wonyongick 댓글 2 좋아요 0 조회수 106

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing 오류

미해결

스프링부트에서 Thymeleaf를 이용해 회원가입 폼을 만들고 있는데 폼에 입력을 제대로 하면 의도한대로 회원가입이 잘 됩니다. 하지만 폼에 아무것도 입력하지 않으면 유효성 검사에서 @NotBlank를 만나서 그에 맞는 에러 메시지를 출력해야 하는데 저렇게 오류가 뜨네요... 대체 이유가 뭘까요 ㅠㅠ 제 회원가입 코드는 다음과 같습니다. User.java (Entity) @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor @Entity(name="users") //테이블 이름 public class User { @Id //기본키 = userid @GeneratedValue(strategy = GenerationType.IDENTITY) private long userid; @Column(unique = true) //아이디 중복 방지 private String username; private String password; @Column(unique = true) //이메일 중복 방지 private String email; } RegisterDTO.java (DTO) @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class RegisterDTO { @NotBlank(message = "아이디를 입력하세요.") private String username; @NotBlank(message = "비밀번호를 입력하세요.") private String password; @NotBlank(message = "이메일을 입력하세요.") private String email; } UserController.java (컨트롤러) @Controller @RequiredArgsConstructor public class UserController { private final UserService UserService; @GetMapping("/register") // 유저 등록 창 불러오기 public String ShowRegister(Model model) { model.addAttribute("userDTO", new RegisterDTO()); return "register"; } @PostMapping("/register") // 유저 등록 public String Register(@Valid RegisterDTO userDTO, BindingResult result, Model model) { if (result.hasErrors()) { // 유효성 오류 발견 System.out.println("유효성 오류"); return "register"; } try { UserService.saveDTOUser(userDTO); // 유저 등록 } catch (IllegalArgumentException e) { // 중복된 사용자 발견 System.out.println("예외 처리"); model.addAttribute("error", e.getMessage()); return "register"; } return "redirect:/userlist"; } } UserService.java (서비스) @Service @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; public void saveDTOUser(RegisterDTO userDTO) { if (userRepository.existsByUsername(userDTO.getUsername())) { throw new IllegalArgumentException("이미 등록된 아이디입니다."); } if (userRepository.existsByEmail(userDTO.getEmail())) { throw new IllegalArgumentException("이미 등록된 이메일입니다."); } User user = User.builder() .username(userDTO.getUsername()) .email(userDTO.getEmail()) .password(userDTO.getPassword()) .build(); userRepository.save(user); } } register.html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Register User</title> </head> <body> <h1>Register User</h1> <form th:action="@{/register}" method="post" th:object="${userDTO}"> <label for="username">username:</label> <input type="text" id="username" name="username" th:field="*{username}" /> <div th:if="${#fields.hasErrors('username')}" th:errors="*{username}"></div> <br> <label for="password">Password:</label> <input type="password" id="password" name="password" th:field="*{password}" /> <div th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></div> <br> <label for="email">email:</label> <input type="text" id="email" name="email" th:field="*{email}" /> <div th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></div> <br> <div th:if="${error}" class="error"> <p th:text="${error}"></p> </div> <button type="submit">Register</button> </form> <br> <a th:href="@{/userlist}">Back to User List</a> </body> </html> 컨트롤러에서 작성한 "유효성 오류", "예외 처리" 구문은 잘 나오더라구요. 그러면 유효성 검사는 잘 수행하는거 아닌가요?

  • java
  • spring
  • spring-boot
  • jpa
  • thymeleaf
과넌 댓글 1 좋아요 0 조회수 105

validation 추가하기에 대해 질문

미해결

[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기

안녕하세요 validation 강의를 듣고 질문 드립니다. 강의 속에서 설명하신대로 하고 postman에서 실행을 하려고 보니 동작은 하는데 비밀번호 조건이 충족되지 않아도 defaultMessage가 뜨지않고 회원가입이 완료되었다는 창이 뜹니다ㅜㅜ @Valid 어노테이션 사용도 다 했는데 뭐가 문제인걸까요?

  • kotlin
  • spring-boot
  • jpa
  • spring-security
  • jwt
syoon 댓글 1 좋아요 0 조회수 156

findProductsBy 메소드에서 왜 Map 을 만들어 찾는지 잘 이해가 안됩니다

미해결

Practical Testing: 실용적인 테스트 가이드

private List<Product> findProductsBy(List<String> productNumbers) { return productRepository.findAllByProductNumberIn(productNumbers); } 그냥 이렇게 바로 리턴 해도 되지 않나요??

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
ewgregerg c 댓글 2 좋아요 0 조회수 172

MockBean Deprecated

해결됨

Practical Testing: 실용적인 테스트 가이드

@MockBean 이 Spring Boot 3.4.0 버전부터 Deprecated 되었다고 경고를 띄워주는데요 이런 경우 @MockitoBean 을 사용하면 되나요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
박소연 댓글 3 좋아요 1 조회수 564

기본 키 매핑 강의에서 질문입니다~

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. IDENTITY 전략일 때, 모아서 INSERT하는 게 불가능하다라고 말씀하셨는데, 이게 PK가 없는 상황에서만 불가능하고 다른 상황(pk가 있을 때 insert 쿼리, select 쿼리 등등)에서는 원래처럼 모아서 커밋 직전에 쿼리가 날라가는건지, 아니면 정말로 IDENTITY 전략일 땐, 모든 JPA가 생성하는 쿼리가 커밋 직전이 아닌 그 때 그 때 나가는건가요?

  • java
  • jpa
ajdsasld 댓글 1 좋아요 0 조회수 136

spread ... 사용하는 이유가 궁금합니다

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요? [조회 페이지 이동] 영상을 보고 있는데요. List, Read Component에서는 spread를 하지 않고 바로 set으로 값을 넣었는데 Add Component에서는 왜 {...initState}, {...todo}를 하는지 궁금합니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
정아연 댓글 2 좋아요 0 조회수 105

데이터베이스 스키마 자동 생성 강의 질문입니다!

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @Column(unique = true, length = 10) private String name 위와같이 코드를 작성할 때, 만약 DB 생성을 자동 기능으로 하지 않고, DB에 따로 테이블 생성을 진행했다면, 위의 코드가 있어도 반영이 안된다는 의미인거죠? 즉, DB에 따로 테이블을 만들 때 name 필드에 unique 제약 조건을 걸지 않고, varchar(255) 이렇게 했다면, 아무리 @Column(unique = true, length = 10) 이렇게 한다고 해도 실제 DB에 반영이 되는 건 아니고 오직 DDL 생성할 때만 반영된다는 거죠?

  • java
  • jpa
ajdsasld 댓글 1 좋아요 0 조회수 118

OrderServiceTest에서 상품주문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Book setName, setPrice, setStockQuantity 할 때 오류가 뜨는데 Item은 추상클래스에 Book이 상속을 받으니까 Book에만 setter를 설정하면 되는 거 아닌가요? item에 setter를 적용해야 오류가 풀리는데 왜 이러는지 궁금합니다. Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10);

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
오득령 댓글 2 좋아요 0 조회수 139

영속성 컨텍스트 2 강의에서 질문있습니다~

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 만약 JPA에서 batch_size 기능을 사용하지 않는다면, 그리고 영속성 컨텍스트의 쓰기 지연 SQL 저장소에 쿼리 2개가 모여있는 상태라면, 커밋되기 전에 각각 다른 네트워크로 즉, 애플리케이션에서 DB로 요청이 2번 진행되서 쿼리가 날라가는 건가요? 그래서 batch_size 옵션으로 = 2가 되면 하나의 네트워크로 2개의 쿼리가 동시에 반영이 되는 건가요? 그래서 batch_size 옵션을 사용하면 API 속도 개선에 사용할 수 있는건가요?? 근데, 그렇다면 사실 무조건 batch_size 옵션을 최대한 크게 설정하면 좋은 거 아닌가요? 이것도 한꺼번에 너무 많은 쿼리들을 보내면 또 문제가 있으려나요??

  • java
  • jpa
ajdsasld 댓글 1 좋아요 0 조회수 115

moveToList 질문 드립니다.

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 선생님. 좋은 강의를 정말 잘 듣고 있습니다ㅎㅎ [네비게이션관련 커스텀 훅] 강의에서 궁금한게 생겼는데요~ 쿼리 스트링에 page와 size가 있는데, moveToList에 파라미터로 page와 size를 전달해서 처리해야 하는 이유가 무엇인지 알 수 있을까요?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
댓글 2 좋아요 0 조회수 96

item을 id로 get하는데 1을 넣었을 때 500에러가 나와요.

미해결

1시간만에 끝내는 spring boot rest api 서비스 개발

1넣으면 apple이 나와야 하는데, 500에러가 나오네요. 빌드는 잘 되었는데 어디가 문젠지 모르겠네요. 코드는 https://inf.run/8swaL 올려두었습니다. 감사합니다!

  • spring-boot
  • jpa
  • swagger
  • mybatis
댓글 1 좋아요 0 조회수 148

저만 화면이 나오지 않나요??

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] PC에서 소리는 나오는데 검은화면으로 나옵니다.

  • java
  • jpa
6udguin 댓글 3 좋아요 0 조회수 256

spring boot 3.0 이상에서 p6spy 적용이 안됩니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

plugins { id 'java' id 'org.springframework.boot' version '3.4.4' id 'io.spring.dependency-management' version '1.1.7' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:3.4.4' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() } 오류 화면 같은 문제인거 같아서요 https://inf.run/ZzfxG 추가하라는 내용을 pdf 어디에서 찾아볼 수 있나요? 아래 질문글로 해결했습니다! implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' https://inf.run/jdbjL

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
문주영 댓글 1 좋아요 0 조회수 750

tailwind 부분 도와주세요

미해결

코드로 배우는 React 19 with 스프링부트 API서버

어디를 수정해야 할까요? 지금 계속 다시 해보고 있는데 해결이 되지 않습니다ㅠ 앞서 이렇게 했었는데 해결되지 않아 다시 해보고있습니다..! tailwind.config.js 의 content에 이렇게 입력하는게 맞나요?? index.css에 이렇게 오류가 떠서요 ㅠㅠ -> 우측하단 언어모드를 tailwindCSS로 바꾸면 밑줄은 사라지는데 npm start 실행시 이렇게 뜹니다..!

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
Sssu 댓글 2 좋아요 0 조회수 149

tailwind.config.js 의 content

미해결

코드로 배우는 React 19 with 스프링부트 API서버

tailwind.config.js 의 content에 이렇게 입력하는게 맞나요?? index.css에 이렇게 오류가 떠서요 ㅠㅠ -> 우측하단 언어모드를 tailwindCSS로 바꾸면 밑줄은 사라지는데 npm start 실행시 이렇게 뜹니다..!

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
Sssu 댓글 1 좋아요 0 조회수 126

Tailwindcss 설정

미해결

코드로 배우는 React 19 with 스프링부트 API서버

npx tailwindcss init 작성시 'tailwind'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라고 뜹니다 코드를 다르게 작성해야하나요?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
Sssu 댓글 2 좋아요 0 조회수 224

Mock & Stub 에 대한 이해

해결됨

Practical Testing: 실용적인 테스트 가이드

두 가지 궁금증이 생겨 질문드립니다!! Mock과 Stub에서 혼란을 느끼는지? Mock & Stub 에 대한 이해를 하였는지? // OrderTest.java import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class OrderTest { @Test void 주문_총_금액을_계산한다() { Product apple = new Product("사과", 1000); Product banana = new Product("바나나", 2000); Order order = new Order(); order.addProduct(apple); order.addProduct(banana); assertEquals(3000, order.totalPrice()); } } // OrderTest.java import org.junit.jupiter.api.Test; import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; public class OrderTest { @Test void 주문_총_금액을_계산한다_Product_Mock_사용() { Product apple = mock(Product.class); Product banana = mock(Product.class); when(apple.getPrice()).thenReturn(1000); when(banana.getPrice()).thenReturn(2000); Order order = new Order(); order.addProduct(apple); order.addProduct(banana); assertEquals(3000, order.totalPrice()); } } 두 테스트에서 생각을 정리하다 보니 저는 마틴 파울러의 test double의 stub 과 mock 에 대한 개념보다 TTD or BDD 스타일의 테스트 코드를 작성하다가 테스트의 편의성을 위해 Mokito을 통한 Mock 테스트 를 먼저 접하게 된 후 마틴 파울러의 test double의 개념을 접하게 되었습니다. 마틴 파울러의 Mock 과 Stub 테스트에서 혼란스러운 이유 테스트 코드를 작성하다보면 자연스럽게 then에 해당하는 부분 은 대부분 상태(값)을 검증하는 테스트 를 위주로 테스트 코드를 작성하게 되는거 같습니다. 주문_총_금액을_계산한다() -> 단위 테스트로 상태(값)을 검증 주문_총_금액을_계산한다_Product_Mock_사용() -> 나는 Mockito의 mock 테스트 로 상태(값)을 검증 test double stub -> 상태(값) 검증 mock -> 행동 검증 위 와 같이 상태(값) 을 검증하는 테스트를 하다보니 stub 테스트 와 Mockito 의 mock을 사용한 테스트 을 동일시 보게 된거같습니다. Mockito의 mock 테스트 의 개념과 test double의 mock 테스트 가 동일한 개념이 아니다. Mokito의 mock을 사용하여 상태(값)을 검증하는 테스트를 하다보니 test double의 stub 테스트 를 Mock 테스트 하였다라고 생각한게 아닌가? 테스트 케이스 stub 과 mock 테스트 구별하기 주문_총_금액을_계산한다() 해당 테스트는 실제 객체 를 이용하여 상태(값)에 대한 검증 을 한다. -> Stub 테스트 주문_총_금액을_계산한다_Product_Mock_사용() 해당 테스트는 Product 를 Mock 하여, order의 totalPrice 을 검증 한다. -> Mock?, Stub? 주문_총_금액을_계산한다_Product_Mock_사용()를 어떻게 바라 볼 것인가? test double의 mock 테스트를 준비 하였지만 검증 부분을 잘못하였다. test double의 stub 테스트를 실제 객체가아닌 가짜객체로 테스트 하였다. @Test void 주문_총_금액을_계산한다_Product_Mock_사용() { // given Product apple = mock(Product.class); Product banana = mock(Product.class); when(apple.getPrice()).thenReturn(1000); when(banana.getPrice()).thenReturn(2000); Order order = new Order(); order.addProduct(apple); order.addProduct(banana); // when int total = order.totalPrice(); // then verify(apple).getPrice(); // apple.getPrice()가 호출되었는지 검증 verify(banana).getPrice(); // banana.getPrice()가 호출되었는지 검증 } 주문_총_금액을_계산한다_Product_Mock_사용()를 위와 같이 수정한다면 test double에서 이야기하는 mock 테스트이지 않을까 생각이 듭니다. 물론 모든 테스트를 test double의 Mock, Stub 테스트라는 틀에 맞춰 작성해한다는 아니라고 생각이 듭니다. 주문_총_금액을_계산한다_Product_Mock_사용()가 마틴 파울러가 이야기하는 test double의 개념 에서 어떻게 생각해 볼 것인가? 에대한 궁금증 우빈님의 생각이 궁금 하기도 합니다. 제가 잘 이해를 하였는지 확인이 필요하여 질문드립니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
홀리몰리 댓글 2 좋아요 0 조회수 185

인기 태그

인프런 TOP Writers

주간 인기글