묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Practical Testing: 실용적인 테스트 가이드
private 상수 테스트 관련 질문
안녕하세요, 선생님의 강의 덕에 개인 프로젝트에 테스트를 적용하는 재미를 느끼고있는 수강생입니다. 강의 내용을 참고하여 개인 프로젝트에서 도메인 테스트를 작성하던 중,한 가지 개념적으로 헷갈리는 지점이 있어 질문드립니다. 강의 중“private 메서드는 테스트할 필요도 없고, 해서도 안 된다”라고 말씀 주셨는데, 엔티티 내부에 도메인 정책으로서 private static final 상수와 이를 사용하는 private 검증 로직이 존재하는 경우엔 어떻게 하지...? 라는 궁금증이 생겼습니다.이때 테스트에서는 경계값을 검증해야 하는데,@Entity public class TransactionFile extends BaseEntity { private static final long MAX_FILE_SIZE = 10; // 중략 private static void validateSize(long size) { state(size != 0, "파일 크기는 0보다 커야합니다."); state(size <= MAX_FILE_SIZE*1024*1024, "파일 크기는" + MAX_FILE_SIZE + "MB 이하여야 합니다."); } } 상수가 private 이므로 테스트 코드에서 값을 참조할 수 없습니다.class TransactionFileTest { long fileSize = MAX_FILE_SIZE * 1024 * 1024 - 1; // 테스트에서는 접근 불가 } 결국 궁금한 점은 private 상수를 경계값 테스트 기준으로 사용할 시...□ 단순히 도메인 모델 정책만 지켜지는지 검증하고 경계값 테스트를 안하는게 맞는지 (예 - MIN_VALUE, MAX_VALUE를 써서 그냥 충분히 작은값, 큰값으로 테스트하고 넘기기)□ 아니면 리플렉션을 이용해서 상수 값을 참조해야하는지(강의 중 리플렉션에 대해 부정적으로 말씀해 주셔서, 이런 경우에도 리플렉션을 지양하는 것이 맞는지 아니면 예외적으로 고려할 수 있는 상황인지...) 강의자님의 실무 기준을 듣고싶습니다.
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
프로젝트 세팅 오류 및 버전 오류 문제 문의
안녕하세요 강의를 보며 프로젝트 세팅을 하면서 궁금한 점이 있어 여쭤봅니다.예제 프로젝트와 강의가 업데이트 될 예정은 없을까요?전체적인 Dependencie들이 옛날 버전이라 예제 프로젝트들에서 익스텐션 호환 및 에러들이 너무 많습니다 ㅠㅠ..1-3강 예시 프로젝트 소개 같은 경우는 ESLint 및 서버 오류들이 너무 많아 해결 못하고 넘어간 상황입니다.2-1강 같은 경우도 Windows/Mac OS 차이(LF, CRLF)로 발생하는 줄바꿈 문자 차이 에러가 나오고 영상에 나온 익스텐션에 경우 Vitest Version >= v1.4.0이라 vitest 및 vitest/ui 등 업데이트를 매번 해야됩니다. (강의는 v0.33.0)2-1까지만 수강하더라도 전체 강의 5%를 넘어 환불도 안되는 상황이라 매번 에러 찾고 수정하는 실습은 제외하고 테스팅 흐름만 파악하는 용도로 강의를 들으려고 합니다.업데이트 예정이 있다면 알려주시면 감사하겠습니다!
-
미해결Practical Testing: 실용적인 테스트 가이드
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
강의를 수강한 이후 테스트 코드를 짜다가 문득 궁금하여 문의드립니다. 보통 테스트 코드는 입력이 있고, 그것에 대한 출력을 검증하는 것인데 반환 값이 void면 어떻게 테스트 코드를 짜면 되는지 궁금합니다. (예를들어 단순 update문) copilot이나 ai는 verify로 행위 검증을 하던데... 이렇게 하는게 맞는건지, 아니면 void로 반환하는것 자체를 지양하는게 좋은지... 의견을 여쭙고 싶습니다!!!
-
해결됨실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
toggleIsModalOpened 테스트 할때 궁금한 점이 있습니다.
제 생각에는 단순히 true가 됨을 테스트 할 것이 아닌 false => true => false와 같은 테스트 단계가 필요하다는 생각이 드는데 이런 연속적인 테스트는 어떤 식으로 구성하는 것이 좋은가요?
-
미해결Playwright 기초 - 기초적인 활용법과 핵심 원리
e2e 폴더 내에 파일을 생성하는 이유가 뭔가요?
그냥 블로그 같은 가이드 보고 폴더를 막 생성했더니 폴더가 어디에 접속해야 있는지도 모르겠고, e2e 폴더 같은건 전혀 없는데요, e2e 폴더 내에 파일을 생성해야하는 이유가 뭔가요?꼭 폴더를 강사님이 세팅한대로 설정해야하나요?처음 폴더 설정이 finder (폴더)로 보여져서 생성되지 않아, 테스트파일 생성 위치와 구조를 처음에 어떻게 잡아야 할지 모르겠습니다.
-
해결됨부트캠프에서 알려주지 않는 것들 (리액트) 1편
강의 마지막이 잘려있는것 같습니다
강의 마지막이 잘려있는 것 같습니다
-
미해결ISTQB AI Testing - 베스트 프랙티스를 배우고 시험에 대비
27강 동영상 재생 불량
27강 재생이 중간에 끊깁니다. 27강 끝까지 못 들어서 완료율이 100% 안되는데 확인 부탁드립니다.
-
해결됨오브젝트 - 설계 원칙편
5-4 Sealed Interface는 주로 모든 케이스 검증이 필요할 때 사용하나요?
안녕하세요 좋은 강의 너무 잘 듣고 있습니다. 강의 내용중 parseCommand 메서드를 분리하는 과정에서 sealed interface 를 사용하셨는데 sealed interface 를 쓴 목적이 컴파일타임에 모든 가능한 명령어 케이스를 처리했는지 검증하기 위함인가요? sealed interface 는 주로 모든 케이스를 검증하고 싶을 때 사용한다고 판단하면 될까요?
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
로딩/에러처리 검증은 어떻게 하는게 좋을까요?
안녕하세요. API 요청이 포함된 컴포넌트를 대상으로 단위/통합 테스트할때 요청 상태에 따라 로딩, 에러 UI가 적절하게 렌더링 되는지도 검증을 해야하는지 궁금합니다.해야한다면, API 호출하는 모든 테스트에서 로딩/에러 UI 검증을 하는게 일반적이고 맞는 건지, 아니면 제 경우에는 ErrorBoundary랑 Suspense를 다음처럼 합쳐서 에러/로딩 처리용 wrapper(?)를 만들었는데, 이런 wrapper 테스트를 따로 작성하는게 맞는건지.. 궁금합니다 ㅎㅎ..interface ComposedBoundaryProps extends ErrorBoundaryPropsWithRender { suspenseFallback: ReactNode; children: ReactNode; reset: () => void; } const ComposedBoundary = ({ suspenseFallback, children, fallbackRender, reset, }: ComposedBoundaryProps) => { return ( <ErrorBoundary onError={(error: unknown) => { // ... }} onReset={reset} fallbackRender={fallbackRender} > <Suspense fallback={suspenseFallback}>{children}</Suspense> </ErrorBoundary> ); };
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
통합 테스트에서 API 요청에 대한 검증은 이루어지지 않아도 괜찮을까요?
FE에서 모킹을 포함한 통합 테스트를 진행할 때, API 요청 전까지의 동작API 요청API 응답API 응답에 따른 화면 변환 1, 4는 테스트에서 주로 다루고 있고,3은 모킹으로 처리하고 있는데, 2번의 경우, 예를 들어 화면에서 필터로 { name: "apple", limit: 10 } 를 설정하고 요청이 발생했으면, request의 parameter에 이런 요청이 도달했다는 것 까지 검증하면 좋을지가 궁금합니다. 생성/삭제/수정과 같은 API가 포함된 경우 동일 GET API라도 다른 응답이 반환되어야 되는 경우가 있어, 해당 테스트 시 응답 자체를 override해서 모킹하여서 작성하였는데, 이 경우 사실상 API 응답과 API 응답에 따른 화면 변환은 테스트가 성공하는 채로 고정하는데, 실제 요청이 올바르게 이루어졌는지는 검증하지 못하는 것 같아서요.
-
미해결ISTQB AI Testing - 베스트 프랙티스를 배우고 시험에 대비
실러버스 제공 여부
강의자료와 실러버스는 제공되지 않는 건가요?
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
강의 소스 코드 압축 풀기 오류
강의 소스 코드를 다운로드 받아 압축 풀기를 하는데 99% 끝부분에서 특정 파일이 에러가 발생해 넘어가지지를 않습니다.건너띄기로 100% 완료하기는 했지만 찜찜해서 문의 드립니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존
16강 '외부 연동을 다루는 방법'의 04:15에 보면,service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존하고 있는 상태입니다.아마 후속 강의에서 UserEntity에 대한 의존도 해소될 것으로 예상되지만, 여기에서도 언급은 해주시면 더 좋을 것 같습니다.
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
선생님, 테스트 코드 제보 강의는 언제쯤 올라오나요?
아직 선착순이 다 안차서 안올라오는건가요?
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
lint에러..
await render(<TextField className={'my-class'} />); expect(screen.getByPlaceholderText('텍스트를 입력해 주세요.')).toHaveClass( 'my-class', );이렇게 props를 넘겨줄때 동일하게 작은 따옴표로 넘겨주거나 expect에 들어가는 문자열을 작은 따옴표로 입력을 해야 테스트전 린트에서 잡히는 에러가 안나네요;;
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
mockfunction에 대해서
안녕하세요 선생님 mockfunction에 대해서 설명 듣다가 질문이 생겨 글 남깁니다. mockfunction이 좋고 유용한 이유가 기존 함수를 변경할 수 있다는 점이라고 하셨는데 , 기존 함수를 변경해서 테스트를 왜 하는지 모르겠습니다 .추후 강의에서 나오는 부분일까요? 그러니까 "필요성"에 대해서 공감이 가지 않는 것 같습니다,, 개발한 함수가 잘 돌아가는지에 대해서 테스트하면 되는 것인데 왜 다른 함수로 바꿔서 테스트를하나요? 그게 버그잡기 등의 효과가 있나요? 있다면 예를 들면 어떤상황이 있을지 알려주심 넘 감사할것 같습니다. 감사합니다
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
mockfunction에 대해서
안녕하세요 선생님 mockfunction에 대해서 설명 듣다가 질문이 생겨 글 남깁니다. mockfunction이 좋고 유용한 이유가 기존 함수를 변경할 수 있다는 점이라고 하셨는데 , 기존 함수를 변경해서 테스트를 왜 하는지 모르겠습니다 .추후 강의에서 나오는 부분일까요? 그러니까 "필요성"에 대해서 공감이 가지 않는 것 같습니다,, 개발한 함수가 잘 돌아가는지에 대해서 테스트하면 되는 것인데 왜 다른 함수로 바꿔서 테스트를하나요? 그게 버그잡기 등의 효과가 있나요? 있다면 예를 들면 어떤상황이 있을지 알려주심 넘 감사할것 같습니다. 감사합니다
-
해결됨오브젝트 - 설계 원칙편
Game, Player, Room간의 관계에 대한 질문을 드려요
영호님 안녕하세요! 이번에는 설계원칙편의 6-1장 강의를 듣던 중, 궁금한 부분이 생겨 질문 드립니다~!! 디미터 법칙을 만족시키기 위해 Game 클래스의 showRoom() 메서드 내부의 구현을 리팩토링 하는 과정에서 player.currentRoom()메서드를 통해 Room 객체에 접근하여 name과 description 정보를 반환받도록 하는 부분이 있었습니다. Q. 혹시 showRoom() 메서드 내부에서 player로부터 Room 객체를 반환 받아 Game객체가 사용하는 것이 아닌, Room에 대한 정보를 Room객체로부터 바로 반환 받도록 하는 것은 어떠신지 궁금합니다! 예를 들어서 Room에 대한 정보를 Room이 책임지도록 하였을 때public class Player { private WorldMap worldMap; private Position position; ... public String currentRoom() { return worldMap.roomAt(position).getRoomInfo(); // 디미터 법칙 준수 } } public class Room { private Position position; private String name; private String description; ... public String getRoomInfo() { return String.format("현재 위치는 %s 입니다. %s\n", name, description); } } Room에 층수 정보와 같이 무언가 추가되는 상황이 발생하더라도 Game에서는 코드를 수정할 필요가 없이 Room 객체 내부에서만 변경하면 될 것 같아보였습니다! 🤔
-
해결됨SW 역량테스트 합격하기 A형 with C++ (Advanced Algorithm)
Visual studio 2017 을 설치할 수 없어요
Visual studio 2017 을 설치할 수 없고,2022로 하니 입력, 출력에 대한 IDE 설정을 할수가 없습니다.다른 좋은 방법좀 알려주실 수 있을까요
-
해결됨오브젝트 - 설계 원칙편
6-2 보호 로직 중복 이슈
안녕하세요 강사님, 강의 잘 보고 있습니다. 이동 로직을 정리하다가 보호(가드) 로직 중복에 대해 질문드립니다.현재 구조에서 Game.tryMove()에서 player.canMove(dir)로 먼저 확인하고, Player.move(dir) 내부에서도 canMove(dir)를 다시 확인하여 막습니다.즉, 이동 가능 여부 판정이 두 번 수행됩니다.// Game private void tryMove(Direction dir) { if (player.canMove(dir)) { // 1차 player.move(dir); // 내부의 2차 showRoom(); } else showBlocked(); } // Player public void move(Direction dir) { if (!canMove(dir)) throw new IllegalArgumentException(); this.position = this.position.shift(dir); } 두 번의 가드가 필요한 이유가 있을까요? SRP/TDA 관점에서는 Game의 판정을 제거하고 player.tryMove(dir)만 호출해 결과만 처리하는 패턴이 더 적절한지, 혹은 move()만 두고 예외로 제어하는 방식을 권장하시는지 궁금합니다.