inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

컨트롤러에서 @Valid로 필드를 검증을 한 이후 질문

미해결

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

안녕하세요~ 좋은 강의 잘 듣고 있습니다. 질문이 하나 있는데요. 컨트롤러에서 @Valid로 필드를 검증이 되지 않으면 공통 예외처리에 걸려서 응답처리가 되고, 정상적으로 필드가 검증이 됐다면 서비스단에 로직을 처리할텐데요~ 서비스단에서는 다시 필드를 검증할 필요가 없을까요? 컨트롤러, 서비스를 나눠서 테스트를 작성하다보니 서비스 단에서도 검증을 해야하나 궁금합니다. 실무에서는 어떻게 보통 어떻게 진행되나요?

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

파이썬 예제 코드 실습 에러

미해결

퀀트 투자를 위한 주식 자동매매 봇 만들기 Part 1

예제 코드를 파이참을 실행해서 어느 프로그램 경로에다가 어떤식으로 연결해야 실행이 되는지 잘 모르겠습니다. 현재 예제 코드가 실행이 잘 안되서요

  • python
  • 투자
  • 퀀트
헌준 댓글 2 좋아요 0 조회수 543

Spring Security 를 포함한 WebMvcTest 질문드립니다.

미해결

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

안녕하세요 좋은 강의 덕분에 테스트에 대해 많이 알게 되었습니다 :) 스프링 시큐리티를 포함한 테스트와 관련해서 질문을 드려보고자 글을 쓰게 되었습니다. (강의에서는 스프링 시큐리티를 사용하지 않지만 테스트와 관련해서 물어볼 곳이 마땅치 않아 이 곳에 글을 남기는 점 양해해주시면 감사하겠습니다) @RequiredArgsConstructor @RestController @RequestMapping("/api") @Slf4j public class AuthController { private final AuthService authService; @PostMapping("/auth/sign-up") public String signUp(@RequestBody SignUpRequest request) { authService.signUp(request); return "회원가입 성공"; } } 현재 회원가입을 하는 컨트롤러의 메서드는 다음과 같습니다. @Service @RequiredArgsConstructor @Slf4j @Transactional(readOnly = true) public class AuthService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; @Transactional public void signUp(SignUpRequest request) { if (userRepository.findByEmail(request.getEmail()).isPresent()) { throw new AlreadyExistException("이미 존재하는 이메일입니다."); } if (userRepository.findByNickname(request.getNickname()).isPresent()) { throw new AlreadyExistException("이미 존재하는 닉네임입니다."); } User user = User.builder() .name(request.getName()) .email(request.getEmail()) .password(request.getPassword()) .nickname(request.getNickname()) .role(UserRole.USER) .build(); user.passwordEncode(passwordEncoder); userRepository.save(user); } } 그리고 실제 회원가입이 진행되는 로직은 이렇습니다. 그리고 제가 WebMvcTest 어노테이션을 사용해서 테스트 코드를 작성한 건 다음과 같습니다. @ActiveProfiles("test") @AutoConfigureMockMvc @WebMvcTest(AuthController.class) class AuthControllerTestWithWebMvcTest { @Autowired protected MockMvc mockMvc; @Autowired protected ObjectMapper objectMapper; @MockBean private AuthService authService; @MockBean private UserRepository userRepository; @DisplayName("회원가입 한다.") @CustomMockUser // 회원가입을 해야되는데 인증이 필요하다? -> 논리적으로 말이 안 됨 -> 올바른 테스트? @Test void signUp() throws Exception { // given SignUpRequest request = SignUpRequest.builder() .name("zun") .email("zun@test.com") .password("12345") .nickname("zunny") .build(); // then mockMvc.perform(post("/api/auth/sign-up") .content(objectMapper.writeValueAsString(request)) .contentType(APPLICATION_JSON) .with(csrf()) ) .andExpect(status().isOk()) .andDo(print()); } } 보시다시피 회원가입 API에 요청이 제대로 되는지를 확인하기 위해 @CustomMockUser 라는 어노테이션을 사용하고 있습니다. (이 어노테이션은 테스트에서 인증을 처리하기 위해 만든 어노테이션입니다. 호돌맨님 강의를 참고해서 만들었습니다.) 제가 혼란스러운 부분은 테스트코드에 써놓은 주석처럼 회원가입이 제대로 되는지를 테스트하기 위한 컨트롤러 코드인데 이걸 통과시키기 위해 인증을 담당하는 @CustomMockUser를 사용하는 것이 올바른 테스트인가 하는 의문입니다. @WebMvcTest를 사용하지 않고 @SpringBootTest를 사용하면 다음처럼 할 수가 있습니다. @ActiveProfiles("test") @AutoConfigureMockMvc @SpringBootTest class AuthControllerTest { @Autowired private UserRepository userRepository; @Autowired private ObjectMapper objectMapper; @Autowired private MockMvc mockMvc; @BeforeEach void tearDown() { userRepository.deleteAllInBatch(); } @DisplayName("회원가입 한다.") @Test void signUp() throws Exception { //given SignUpRequest request = SignUpRequest.builder() .name("zun") .email("zun@test.com") .password("12345") .nickname("zunny") .build(); //expected mockMvc.perform(post("/api/auth/sign-up") .content(objectMapper.writeValueAsString(request)) .contentType(APPLICATION_JSON) ) .andExpect(status().isOk()) .andDo(print()); } } 혹시 이와 관련해서 우빈님은 어떻게 생각하시는지, 그리고 스프링 시큐리티를 사용하는 프로젝트에서는 컨트롤러 쪽 테스트를 어떻게 하는 것이 좋은지 알려주시면 감사하겠습니다!

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
비가싫어요 댓글 2 좋아요 0 조회수 1445

Stock 엔티티의 예외처리 관련하여 질문 드립니다.

해결됨

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

안녕하세요 강사님, 먼저 좋은 강의 잘 듣고 있어서 감사의 말씀 드립니다. 테스트에 대한 질문은 아니지만 강의 중 작성해주신 코드에 관하여 궁금증이 생겨 질문 드립니다. 만약 문제가 되는 경우에는 삭제하도록 하겠습니다. 먼저 궁금증이 생긴 위치는 다음과 같습니다. Business Layer 테스트 (3) 강의의 31:07 Stock 엔티티의 deductQuantity 메소드에서 예외를 발생시키는 코드 public void deductQuantity(int quantity) { if (isQuantityLessThan(quantity)) { throw new IllegalArgumentException("차감할 재고 수량이 없습니다."); } this.quantity -= quantity; } [질문] 강의 중에서 deductQuantity 메소드에서 왜 isQuantityLessThan로 검증해야 하는지 설명해 주셨는데 그 부분은 이해가 되었습니다. 그런데 예외 메세지를 직접 문자열로 작성해주는 부분에서 궁금증이 생겼습니다. 스프링 빈에서 MessageSource 인터페이스를 통해 별도의 properties 파일로 예외 메세지 관리가 가능한데, 엔티티는 스프링 빈으로 등록되는 것이 아니어서 MessageSource를 통해 예외 메세지를 가져올 수 없을 것이라 생각됩니다. (그러나 deductQuantity가 호출되는 시점에서 진짜로 차감할 재고 수량이 있는지 체크하는 것도 타당하다고 생각합니다.) 그렇다면 서비스에서는 MessageSource를 통해 에러 메세지를 가져오되, 엔티티에서는 문자열로 직접 작성하는 방법밖에 없을까요? (대부분의 메세지는 properties 파일에 작성해두고, 엔티티에서만 직접 문자열로 작성하는 것이 약간 통일되지 않았다는 느낌이 들기도 하는데 어쩔 수 없는 것 같기도 합니다..) 혹시 현업에서도 MessageSource로 메세지 처리가 가능한 부분은 MessageSource를 사용하고, 그렇지 않는 부분에서는 직접 문자열로 작성하는 방식이 많이 사용되는지도 궁금합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
원준 댓글 2 좋아요 1 조회수 426

OrderProduct 클래스 질문

미해결

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

안녕하세요. 강사님께서 OrderProduct 클래스를 아래와 같이 작성하셨습니다. Order와 Product는 N:N 양방향 관계인데 이것을 피하기 위해 OrderProduct 클래스를 새로 생성하셨는데요. order 필드가 @ManyToOne이면 product 필드가 @OneToMany가 되어야 하는게 아닌가요? 그래야 N:N 구조가 되는 것 같아서요! @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class OrderProduct extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) private Order order; @ManyToOne(fetch = FetchType.LAZY) private Product product; public OrderProduct(Order order, Product product) { this.order = order; this.product = product; } }

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
LetsGoHigh 댓글 2 좋아요 -1 조회수 504

Persistence Layer 테스트 (1) 질문

미해결

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

안녕하세요, 좋은 강의 잘 듣고 있습니다. 강의 14분쯤에 forDisplay() 메서드를 ProductSellingType Enum 파일에서 생성을 하셨는데요. ProductService 클래스가 아닌 ProductSellingType Enum에서 생성한 이유가 있을까요? 어떠한 기준으로 생성을 하셨는지 궁금합니다. 추가적으로 이런 부분에 있어 특정 기준을 세우는 관련 글?을 읽고 싶은데 키워드 같은게 있을까요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
LetsGoHigh 댓글 1 좋아요 1 조회수 615

Pyqt6 Qthred 에서 Ui 함수 사용하기

미해결

이런 식으로 코드를 사용중입니다 from PyQt6.QtWidgets import * from PyQt6.QtCore import * class thread (Qthread): def __init__(self): super().__init__() def run(self): while True: mainbot_window.fun1() class UI (QWidget): def __init__(self): super().__init__() self.inits() self.T1 = thread() self.T1.start() def inits(self): print("각종 변수 설정") def fun1(self): print("run code") def main(args=None): global mainbot_window app = QApplication(sys.argv) mainbot_window = UI() mainbot_window.show() try: app.exec() except KeyboardInterrupt: pass if __name__ == '__main__': main() 여기서 global 변수를 사용하지 않고 싶습니다. 글로벌 변수를 사용하지 않고 Thread 에서 Qwidget 의 함수를 사용할 방법이 있을까요? 시도한것 thread 에서 pyqtsignal.emit 을 사용해서 시도해봤는데 ui가 검은 화면으로 뜬체 작동하지않습니다. Qthread 대신 Qtimer 를 사용 =>작동은 잘되나 ui를 표시하는데 약간의 딜레이가 생깁니다. 그래서 되도록이면 Thread를 사용하고싶습니다.

  • python
  • pyqt
  • pyqy6
  • threading
  • qtread
정민기 댓글 1 좋아요 1 조회수 842

환경설정 conda activate myST 해도 가상환경 설정에 들어가지 않습니다.

해결됨

실전 프로젝트로 배우는 데이터 앱 만들기 with Python & Streamlit

안녕하세요 3강 콘다 가상환경에서 비주얼 스튜디오 터미널에서 conda activate myST해도 터미널에 계속 PS로 표시되며 가상환경으로 들어가지 않습니다. cmd에서는 같은 명령어를 입력하면 들어가지는데 비주얼 스튜디오 터미널에서는 들어가지지 않는 것 같습니다. 뭐가 문제일까요?

  • python
  • streamlit
honest5858 댓글 1 좋아요 0 조회수 511

테스트에서 @Autowired 사용하는 이유가 있나요?

미해결

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

찾아보니 Junit 이슈인거같은데.. 생성자 주입해도 잘 받아지는 것 같거든요

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
목동 개발자 댓글 1 좋아요 0 조회수 721

@BeforeEach 동작

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 강사님의 강의를 듣고 Spring Boot로 웹 페이지 개발을 연습중입니다. TDD방식으로 구현을 하며 웹 페이지를 만들고 있습니다. 환경 IDE: IntelliJ pc: MacBook Air 2022 Spring Boot Version: 3.1.2 소스파일: https://drive.google.com/file/d/17oeGgTCTbRMAtcaxrE4sWDtw7NRTJlPk/view?usp=sharing 구현 테스트환경을 독립적으로 구성하고 싶어서 @BeforeEach를 사용하여 테스트 코드 실행 전에 H2 db 인메모리에 sql스크립트를 실행 하여 데이터를 세팅하는 작업을 하고 테스트들을 진행 중에 있습니다. import org.springframework.jdbc.core.JdbcTemplate; import org.junit.jupiter.api.BeforeEach; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.init.ScriptUtils; @BeforeEach void dbConfig() { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); ClassPathResource schema = new ClassPathResource("schema.sql"); try { ScriptUtils.executeSqlScript(jdbcTemplate.getDataSource().getConnection(), schema); } catch (SQLException e) { throw new RuntimeException(e); } ClassPathResource data = new ClassPathResource("data.sql"); try { ScriptUtils.executeSqlScript(jdbcTemplate.getDataSource().getConnection(), data); } catch (SQLException e) { throw new RuntimeException(e); } } 증상 데이터를 Insert후에 반환된 기본 키 값으로 Select하여 검증을 하는 로직에서 단독 테스트시에는 정상적으로 잘 동작하나 test 패키지를 전체 테스트를 돌리면 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "board" not found; SQL statement: 이와 같이 테이블을 찾을 수 없다고 간헐적 으로 오류가 발생하고 있습니다. [시도해본 방법] SQL스크립트가 제대로 로드 되지 않았다고 생각되어 테이블 생성 스크립트 후에 Thread.sleep(); 을 줘서 지연을 줘봤지만 실패 기존에는 ScriptUtils.executeSqlScript(jdbcTemplate.getDataSource().getConnection(), schema); 실행을 schema와 data를 연달아 수행하던 것을 schem먼저 수행 후, data수행하도록 변경했지만 실패 Chat-GPT에 질문을 해보니 @BeforeEach를 사용하여 데이터베이스 스키마를 초기화하고 데이터를 삽입하는 경우, 테스트 메소드 간에 순서가 보장되지 않을 수 있기 때문에, 특정 테스트 메소드가 실행되기 전에 데이터베이스 초기화가 이루어지지 않을 수 있습니다. 라고 답변을 받았는데요. 그래서 @Order 어노테이션으로 @Test 메소드들의 순서를 지정해봤는데도 동일한 오류가 발생합니다. 이와 같이 잘 안되고 있어 문의 드립니다.

  • spring
  • mvc
  • junit5
asdasfafsf 댓글 2 좋아요 0 조회수 687

17298 오큰수 구하기 질문있습니다.

미해결

Do it! 알고리즘 코딩테스트 with Python

올려주신 코드로 공부하고 백준에 업로드 해 본 결과 시간 초과가 뜨는데, 시간 초과가 되지 않게 하려면 어떻게 수정할 수 있을까요 ?

  • python
  • 코딩-테스트
  • 알고리즘
스탑수 댓글 2 좋아요 1 조회수 707

테스트 동시성 관련 질문드립니다

미해결

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

안녕하세요 강의 다 듣고 기능 추가해 가며 공부를 하고 있습니다. 그러다 막히는 부분이 있어 질문드리는데 강의 내용을 조금 벗어 나는거 같아 질문을 드려도 될지 모르겠는데 괜찮으시다면 답변 주시면 감사하겠습니다. @Transactional public OrderResponse createOrder(OrderCreateServiceRequest request, LocalDateTime registeredDateTime) { List<String> productCodes = request.getProductCodes(); List<Product> products = findProductsBy(productCodes); Member member = memberRepository.findByPhoneNumber(request.getPhoneNumber()).get(); deductStockQuantities(products); Order order = Order.create(products, member, registeredDateTime); return OrderResponse.of(orderRepository.save(order)); } order를 생성하는 부분에서 재고 감소 되는 부분을 동시성 처리를 해보려 하는데 테스트 코드에선 deductStockQuantities로 넘어가서 findAllByProductCodeIn 만 한번 돌고 롤백이 되더라구요. @Test public void create_order_with_concurrent_5_request() throws InterruptedException { //given createProducts(); OrderCreateServiceRequest request1 = OrderCreateServiceRequest.builder() .productCodes(List.of("A002","A003")) .phoneNumber("010-1111-2222") .build(); OrderCreateServiceRequest request2 = OrderCreateServiceRequest.builder() .productCodes(List.of("A002","A003")) .phoneNumber("010-1111-2222") .build(); OrderCreateServiceRequest request3 = OrderCreateServiceRequest.builder() .productCodes(List.of("A002","A003")) .phoneNumber("010-1111-2222") .build(); int numberOfThreads = 3; ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads); CountDownLatch latch = new CountDownLatch(numberOfThreads); //when executorService.submit(() -> { try { orderService.createOrder(request1, LocalDateTime.now()); }finally { latch.countDown(); } }); executorService.submit(() -> { try { orderService.createOrder(request2, LocalDateTime.now()); }finally { latch.countDown(); } }); executorService.submit(() -> { try { orderService.createOrder(request3, LocalDateTime.now()); }finally { latch.countDown(); } }); latch.await(); //then List<Stock> stocks = stockRepository.findAllByProductCodeIn(List.of("A002","A003")); assertThat(stocks).hasSize(2) .extracting("productCode", "quantity") .containsExactlyInAnyOrder( tuple("A002", 7), tuple("A003", 7) ); } @Lock(LockModeType.PESSIMISTIC_WRITE) List<Stock> findAllByProductCodeIn(List<String> productCodes); 테스트 코드는 구글링해서 넣어보았는데 이런 부분 관련해서 따로 배운게 없어 잘 안되더라구요. 락도 걸어보고 했는데 어디서 안되는지 잘 모르겠어서 질문드립니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
김주희 댓글 1 좋아요 1 조회수 879

이 경우, @BeforeEach에 fixture를 구성해도 될까요?

미해결

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

지금 OrderServiceTest 클래스의 createOrder(), createOrderWithStock(), ... 메서드들은 주문을 생성하기 위해서 given절에서 모두 동일하게 product1, 2, 3을 먼저 생성해주는 fixture가 있습니다. @Test void createOrder() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); Product product1 = createProduct(HANDMADE, "001", 1000); Product product2 = createProduct(HANDMADE, "002", 3000); Product product3 = createProduct(HANDMADE, "003", 5000); productRepository.saveAll(List.of(product1, product2, product3)); OrderCreateServiceRequest request = OrderCreateServiceRequest.builder() .productNumbers(List.of("001", "002")) .build(); // when OrderResponse orderResponse = orderService.createOrder(request, registeredDateTime); // then assertThat(orderResponse.getId()).isNotNull(); assertThat(orderResponse) .extracting("registeredDateTime", "totalPrice") .contains(registeredDateTime, 4000); assertThat(orderResponse.getProducts()).hasSize(2) .extracting("productNumber", "price") .containsExactlyInAnyOrder( tuple("001", 1000), tuple("002", 3000) ); } product를 생성해주는 부분을 @BeforeEach로 빼내려고 하는데, 적절하다고 판단되시는지 궁금합니다. OrderServiceTest의 모든 메서드가 동일한 product를 생성하고는 있지만, 각 테스트 메서드에서 "001"이라는 상품이 있는지는 @BeforeEach 메서드까지 스크롤을 왔다갔다하면서 확인해야될거라 생각합니다. (만약 없는 상품을 주문한다면 given절에서 예외가 발생하는 것이기 때문에, 이 부분은 당연히 있는 상품을 주문한다는 것을 보장 하고 테스트 코드를 작성해야 할까요?) order에 관한 테스트이기 때문에, product에 대한 부분은 분리해도 될거라 생각하지만, 우빈님의 말씀대로 스크롤을 왔다갔다하면서 @BeforeEach의 메서드를 수시로 보는 것은 안좋다고 느껴져서.. product 생성에 대한 fixture를 분리괜찮다고 생각하시나요?

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

섹션8 - Spring REST Docs

미해결

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

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강의를 100% 다 소화하지는 못했지만 일단 거진 한바퀴는 돌리면서 마지막에 문제가 생겨 질문 드립니다. plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id "org.asciidoctor.jvm.convert" version "3.3.2" } group = 'sample' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } asciidoctorExt } repositories { mavenCentral() } dependencies { // Spring boot implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' // test testImplementation 'org.springframework.boot:spring-boot-starter-test' // lombok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' //테스트에서 lombok 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' // h2 runtimeOnly 'com.h2database:h2' // Guava implementation("com.google.guava:guava:32.1.1-jre") // RestDocs asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor' testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' } tasks.named('test') { useJUnitPlatform() } ext { // 전역 변수 snippetsDir = file('build/generated-snippets') } test { outputs.dir snippetsDir } asciidoctor { inputs.dir snippetsDir configurations 'asciidoctorExt' sources { include("**/index.adoc") } baseDirFollowsSourceDir() dependsOn test } bootJar { dependsOn asciidoctor from ("${asciidoctor.outputDir}") { into 'static/docs' } } 일단 build.gradle 내용이구요. 운영체제는 윈도우 입니다. 마지막에 build 후 jar파일을 실행하여 localhost:8080/docs/index.html 을 확인해보려고 하니 접속이 되지 않아 확인해보니 resources - static 디렉토리에 index.html이 생성되지 않았음을 확인하였습니다. build 디렉토리에는 생성되어 있었구요. 몇번이나 clean 후 build를 통해 build쪽에는 index.html이 생성 되는 것을 확인 하였으나, static 패키지 하위에 docs 패키지 조차 생성되지 않아 제가 뭔가 오타를 낸건지 운영체제 문제인지 질문 드리고자 합니다. 감사합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
댓글 3 좋아요 2 조회수 1366

higher order function 에서

미해결

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

128줄에 return inside에서 inside()를 안하는 이유가 궁금합니다 @higher_order_example 자체가 inside 리턴받은 함수를 자동으로 ()붙여서 실행해주는 것인가요? 136줄에 sample_example()을 안쓰면 121줄에 있는 func 매개변수로 못넣는것인가요???

  • python
  • 알고리즘
남기정 댓글 2 좋아요 1 조회수 368

섹션7 - 테스트 환경의 독립성을 보장하자

미해결

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

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강의 재미나게 잘 보고있습니다. 제목에 남겨드린 강의에서 creatOrderWithNoStock의 주제와 벗어나 given절의 deductQuantity에서 예외가 발생할 수 있는 상황을 예를 들어서 설명해 주셨고, 테스트 환경에서는 가능한 생성자를 기반으로 환경을 구성하여 진행하는것이 좋다고 말씀 주셨는데 그럼 이 경우에는 Stock stock1 = Stock.create("001", 2); Stock stock2 = Stock.create("002", 1); 와 같이 생성 시점에 이미 부족한 수량으로 설정 하여 테스트를 진행하여 deductQuantity를 사용하지 않고, deductQuantity의 경우 따로 단위 테스트를 통해 수량 감소를 확인하는걸로 테스트를 구성하는 식으로 가면 되는건지 궁금합니다.

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

controller, service용 dto를 분리시키는 것에 대한 질문

미해결

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

항상 잘 듣고 있습니다. 감사합니다. controller layer와 service layer의 dto를 서로 분리시켜서 service layer가 상위 레이어를 모르도록 한다는 것은 이해가 되었습니다. 질문 드리겠습니다! dto를 분리할 때, 중복된 코드가 복잡성을 증가 시킬 수도 있고 운영 시, 두 dto 간의 변환 과정의 비용 이 어느 정도 성능에 영향을 미칠 수 있다고도 생각합니다. 2개로 분리하는 방법은 일반적인 설계 패턴은 아니라고 생각되는데, 혹시 현업에서도 자주 사용하는 방식이신지가 궁금합니다. service에서 생성된 response 데이터에 대해서도 controller만의 response dto 를 따로 생성할 필요가 있는지 궁금합니다. 클라이언트로 내려주는 응답 객체로 controller 클래스에서 ResponseEntity 는 사용하지 않으시는지, 주로 현업에서도 강의에서처럼 응답 객체(ApiReponse)를 커스텀해서 내려주는 방식을 선호하시는지 궁금합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
재영 댓글 3 좋아요 3 조회수 3728

Controller 테스트할 때, Service 에 대한 로직

미해결

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

안녕하세요! 테스트에 대해 의아했던 부분이 많이 풀리는 강의입니다. 정말 감사드려요. 강의를 잘 듣고 있다가 궁금한게 생겨서요! controller @mockBean Service service @test void postData() { // when when(service.message()).thenRetrun() } 간단하게 코드를 적어봣는데요! service에 대해 MockBean으로 주입만 해줬을 뿐, Service에 대한 로직이 없어서요! 제 생각에는 Service가 return 하는 부분은 이미 서비스 계층에서 테스트가 끝났고 Controller 에 테스트를 해야하는 주점은 1 ) Request 에 오는 데이터들의 검증 뿐이라고 생각하는데 맞나요? Get 같은 경우에도 Service에 오는 건 그냥 빈 배열처리하셨더라구요! 감사합니다!

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

선생님 데이터 import가 안돼요 ㅠㅠ

미해결

[개정판] 파이썬 머신러닝 완벽 가이드

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 보스턴 가격예측 데이터 임포트가 안돼요 ㅠㅠ

  • python
  • 머신러닝
  • 통계
이호준 댓글 2 좋아요 0 조회수 497

인기 태그

인프런 TOP Writers

주간 인기글