묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
vitest 실행시 테스트 실행에서 출력을 기록하지 않았습니다
결과가 저렇게나오는데 yarn test 실행하면 로그가 정상적으로 출력됩니다 이유가뭘까요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
jpaRepository 에서 update 메서드 테스트 질문 드립니다.
jpaRepository에서 update 관련 메서드를 테스트하던 중 고민이 생겼습니다.update로 변경한 결과가 DB가 아닌, 영속성 컨텍스트에만 반영이 되어서 수정된 값을 확인하기 위해 find()메서드로 저장된 객체를 불러오면 수정한 것과 다른 원본 결과가 출력됩니다.이 문제를 해결하기 위해 두 가지 방법을 생각해보았습니다.하나는 @Modifying 애노테이션에 clearAutomatically = true 라는 옵션을 달아주는 방법이었는데, 이 방식은 테스트를 위해 프로덕션 코드를 수정하기도 하고 성능에 문제가 발생해서 제외하였고다른 하나는 테스트 코드에 EntityManager를 이용해 강제로 flush()와 clear()를 이용해 영속성 컨텍스트를 비워주도록 하는 방법이었습니다. 이 방식도 테스트 코드가 깔끔하지 않고 더 jpa에 종속적이게 되는 것 같아서 마음에 들진 않는데 강사님은 어떤 방식으로 해결하셨는지 궁금합니다!
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
토이프로젝트 실행시 이메일 설정 부분에서 앱비밀번호 항목이 보이지 않습니다.
계정차이일 수 있겠지만, 해결방법을 찾을 수 있을까 하여 문의드립니다. 제 구글 계정은 앱비밀번호 항목이 없습니다. 혹시 다른 방법이 없을까요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
변경감지
도메인 모델을 추가하고 그 도메인 모델 내부에서 작업을 처리하기 때문에 변경 감지 (dirty checking) 의 기능을 사용하지 못하게 되는 거 같은데요! 이 부분은 어느정도 포기를 하는걸까요?
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
질문 있습니다.
안녕하세요. 강의 내용 중 정확히 이해하지 못하고 있는 것이 있어서 질문 드립니다.강의 중 로그인 버튼 같이 간단한 동작만 있는 컴포넌트는 그 자체를 테스트 하는 것이 아니라, 통합 테스트로 상태에 따른 동작을 검증하는 것이 더 효율적이고 정확한 테스트가 된다. 라고 하셨습니다.또한 이런 컴포넌트는 스토리북과 같은 도구를 사용하여 스타일이나 레이아우싱 틀어지지 않는지 확인하는 것이 더 중요하다. 라고 말씀 하셨습니다.이 뜻은 통합 테스트를 스토리북과 같은 도구와 함께 하라는 것이 아니라, 통합 테스트로 상태에 따른 동작을 검증하고, 그 안에 있는 각각의 컴포넌트들은 스토리북 안에서 스타일과 레이아웃이 틀어지지 않는지 확인하라는 것일까요?아니면 스토리북을 통해 네비게이션 같은 컴포넌트를 만들고 그 단위로 통합 테스트를 하란 말씀이실까요??궁금합니다. 강의 너무 잘 듣고 있습니다. 정말 감사합니다!
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
Dummy 클래스 위치에 대한 질문
현재 "회원가입 서비스 코드 리팩토링"까지 봤는데 Dummy는 테스트 단에서만 쓰이는 것으로 보입니다. 그러면 더미 클래스를 main.config.dummy가 아닌 test.dummy에 작성하는 것이 의미가 분명하고 추후 개발 및 배포에서도 용이한 것 아닌지 의문이 들어 질문 드립니다! config에 작성한 이유와 test에 작성하지 않은 이유가 궁금합니다.!
-
미해결실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
이 방법이 TDD가 맞나요?
안녕하세요! 강의를 드는 중 의아한 부분이 있는데요.제가 알고, 공부했던 TDD 와는 달라서 좀 의문이네요.제가 아는 TDD는 Red - Green - Refactor 사이클을 통해 테스트 코드를 작성하면서 자연스럽게 프로덕트 코드가 생성되는 방법입니다. 그 과정은 매우 세밀하고, 정말 짧은 주기로 테스트를 돌려봐야하죠. 강의에서는 프로덕트 코드를 테스트 파일에 작성하는 것으로 밖에 안 보이고 POJO 상품등록하는 로직이 완성될 때까지 테스트를 단 한 번 돌려본다는 게 의아하네요. 테스트 파일에 아무런 테스트 없이 내부 클래스로 프로덕트 코드를 작성하고 다 만들어지면 그 클래스를 옮기는 게 TDD가 맞나요? 이 정도 TDD라면 프로덕트 코드 먼저 만들고 단위 테스트 작성하는 것과 별반 차이가 없다고 느껴져요.제가 순수 자바로만 TDD를 공부했기 때문에 스프링 부트에서 어떻게 하는 지 모르는 걸 수도 있는데, TDD 근간이 달라지는 것 같아 정말 순수하게 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
access token의 경우 테스트 코드에서 어떻게 처리해야되나요?
안녕하세요. 현재 강의 잘 수강하고 있습니다.현재 거의 모든 controller에서 access token을 받아서 사용하고 있습니다.토큰의 경우 만료시간 등이 있는데 테스트 코드에서 어떻게 처리되는지 궁금합니다.저 같은 경우는 spring security 사용하지 않고, 직접 API로 Token을 발급하였습니다.예시라던지 레퍼런스가 있다면 공유 좀 부탁드려요~감사합니다.
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
CSS
영화 상세페이지 구현에서 className으로 modal_poster-img를 주니까 다른 곳에 있던 css가 적용되는데 위에 import하지 않아도 가능한건가요??
-
미해결실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
POJO로 개발했는데 비즈니스 로직을 로깅해야 할 경우, 어떻게 해야 할까요?
강의 잘 듣고 있습니다! 강의 들으면서 문득 궁금한 점이 생겼는데요. POJO로 개발했는데, 도메인 클래스 내의 비즈니스 로직을 로깅을 해야하는 경우가 실무에서 많을까요? 만약, 그런 경우가 있다면, 어떻게 해야 할지 궁금합니다. 공통된 패턴이 있다면, AOP를 사용해볼 수 있을 것 같은데, 그렇지 않은 경우, 어쩔 수 없이 도메인 모델이 로깅 프레임워크에 의존하지 않나 라는 생각이 들어서요. 로깅하고 싶은게 클래스의 메서드의 매개변수와 리턴값이 아닌 내부 로직 함수일 경우가 특히 궁금합니다. 혹시, 이런 경우는 실무에서 잘 발생하지 않아 알 필요가 없을까요?
-
미해결쉬운 모바일 테스트 자동화 시작하기 : Appium Studio
iOS 단말 연결 및 에뮬레이터 실행 방법 문의드립니다.
iOS 단말 연결하는 방법도 Android 와 동일한 방법으로 설정해보면 되는 걸까요?만약 iOS 연결 방식이 다르다면, 어떻게 설정을 하면 될까요??
-
미해결2시간으로 끝내는 프론트엔드 테스트 기본기
[공유] cy.visit() failed trying to load;
위 화면처럼 connect ECONNREFUSED::1:54382등 locahost에 접근할 수 없다고 나오면 cypress.config.ts에서 baseurl 설정해야합니다.(https://parkparkpark.tistory.com/186)import { defineConfig } from "cypress"; export default defineConfig({ e2e: { baseUrl: "http://localhost:3000", setupNodeEvents(on, config) { // implement node event listeners here }, }, });
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
local storage
저장할 때밑에 코드를 쓰면 에러가 뜹니다ㅠㅠ어떻게 해결해야하나요?const initalTodoData = localStorage.getItem("todoData") ? JSON.parse(localStorage.getItem("todoData")) : []; function App() { const [todoData, setTodoData] = useState([initalTodoData]);
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
list컴포넌트 생성하기
List 컴포넌트 생성하기에서 props로 key={data.id}를 넘겨주는데 저기서는 사용하지 않는데 넘겨주어야 하나요? 빼도 상관 없나요??
-
미해결실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
generate -> add Dependency 이 메뉴가 안보이던데, 어떻게 보이게할까요?
generate -> add Dependency 이 메뉴가 안보이던데, 어떻게 보이게할까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
a 서비스에서 b 서비스를 의존하는 코드에 대한 테스트는 어떻게 해야 되나요??
안녕하세요 강사님, 궁금한게있습니다.인스타그램, 페이스북을 사용할 때 제가 쓴 게시글에 다른 사람이 댓글을 달면 알림이 생성되는데, 제가 작성한 로직에서는 CommentService에서 댓글을 작성하고 alarmService를 호출하여 알림까지 생성하는 로직입니다.이렇게 로직을 짰을 때 제가 생각한 문제점에 대한 해답을 찾고 싶습니다.1. CommentService에서 다른 Service를 의존하게 되는 것2. 댓글 작성이라는 테스트를 짤 때 댓글 작성에 초첨을 맞출 수 없고 알림까지 테스트를 작성해야 되기 떄문에 핵심 기능 외에 다른 부가적인 기능 때문에 테스트의 집중도가 떨어집니다.3. 한 트랙잭션에 묶여서 알림을 생성하는데 문제가 발생하면 댓글도 생성되지 않습니다.이러한 경우 어떤 학습을 통해 개선할 수 있는지 가르쳐주실 수 있나요?
-
해결됨부트캠프에서 알려주지 않는 것들 (리액트) 1편
코드 샌드박스 안되는거같습니다
코드 샌드박스들어가면 이런식으로 뜨는데 어떻게 해결하나요?
-
미해결Practical Testing: 실용적인 테스트 가이드
OrderRepositoryTest에서 단위테스트가 가능한가요?
@SpringBootTest class OrderRepositoryTest { @Autowired private OrderRepository orderRepository; @Autowired private ProductRepository productRepository; @DisplayName("해당 날짜의 모든 결제 내역을 조회한다.") @Test void findAllByDate() { // given LocalDateTime time1 = LocalDateTime.of(2024, 5, 11, 10, 0); LocalDateTime time2 = LocalDateTime.of(2024, 5, 10, 10, 0); Product product1 = createProduct("001"); Product product2 = createProduct("002"); Product product3 = createProduct("003"); Product product4 = createProduct("004"); productRepository.saveAll(List.of(product1, product2, product3, product4)); Order order1 = Order.builder() .products(List.of(product1, product2)) .now(time1) .build(); Order order2 = Order.builder() .products(List.of(product3, product4)) .now(time2) .build(); orderRepository.saveAll(List.of(order1, order2)); // when LocalDate findDate = LocalDate.of(2024, 5, 11); List<Order> findOrders = orderRepository.findAllByDate( findDate.atStartOfDay(), findDate.plusDays(1).atStartOfDay(), OrderStatus.INIT ); // then Assertions.assertThat(findOrders).hasSize(1); } private static Product createProduct(String number){ return Product.builder() .productNumber(number) .productType(ProductType.HAND_MADE) .sellingType(ProductSellingType.SELLING) .name("test") .price(1000) .build(); } } OrderRepositoryTest에서 매서드 테스트를 할 때, Order와 Product는 1대다 다대1로 연관관계 매핑되어 있는 상태인데, 그러면 위와 같이 작성할 경우, productRepository와 관련된 코드가 들어가니, 단위테스트가 깨지는거 아닌가요? 이럴때 어떻게 해야하나요?
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
검색어 입력 후 초기화하는 방법 궁금합니다!
안녕하세요. 강의 수강 중에 추가적으로 구현하고 싶은 기능이 있는데 어떻게 해야할지 모르겠어서.. 질문 남깁니다. 검색창에 검색어를 입력하면 SearchPage에 관련 영화 포스터들이 나오고 그 중에 하나를 클릭해서 영화 상세 페이지(DetailPage)로 이동했을 때 검색창을 초기화하고 싶은데 어떻게 해야 하는지 궁금합니다.
-
해결됨실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
2강 storybook & vitest
안녕하세요. 2.1강에서 storybook, vitest 명령어를 사용했을 때, 에러가 나타나서 질문 드립니다 Settingbranch: unit-test-examplevitest 플러그인: v0.3.0 (현재 이하로는 변경이 안되는 것 같습니다)node: 19.9.0 eslint.json - `"prettier:prettier": "off"` 추가prettierrc - `"endOfLine": "auto"` 추가 storybook 사용 시(npm run storybook) Web의 경우 새로고침을 하면 정상 페이지로 동작하지만 에러 로그는 그대로 입니다vitestimport { screen } from '@testing-library/react'; import React from 'react'; import TextField from '@/components/TextField'; import render from '@/utils/test/render'; it('className Prop으로 설정한 css class가 적용된다.', async () => { // Arrange - 테스트를 위한 환경 만들기 // -> className을 지닌 컴포넌트 렌더링 await render(<TextField className="my-class" />); // Act - 테스트할 동작 발생 // -> 렌더링에 대한 검증이기 때문에 이 단계는 생략 // -> 클릭이나 메서드 호출, prop 변경 등등에 대한 작업이 여기에 해당 합니다. // Assert - 올바른 동작이 실행되었는지 검증 // -> 렌덩링 이후 DOM에 해당 class가 존재하는지 검증 // TextField는 placeholder 요소가 있습니다. // vitest의 expect 함수를 사용하여 기대 결과를 검증 expect( screen .getByPlaceholderText('텍스트를 입력해 주세요.') .toHaveClass('my-class'), ); });