이야기를 나눠요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
Practical Testing: 실용적인 테스트 가이드
테스트 가이드 강의 수강하고 프로젝트 진행 중 번외로 질문하고 싶은 것이 있어 문의남깁니다 !
제가 테스트 강의를 다 보고 프로젝트를 진행하던 도중에 막혔던 테스트 케이스가 있어 이렇게 문의드립니다. 바쁘시겠지만 혹시나 시간이 나신다면 한번 피드백 주시면 감사하겠습니다 ㅠㅠ https://mingeonho1.tistory.com/entry/JUnit5-WithMockUser%EC%97%90%EC%84%9C-username%EC%9D%B4-%EC%9D%98%EB%8F%84%EB%8C%80%EB%A1%9C-%EC%9E%91%EB%8F%99-%EC%95%88-%ED%95%A8간단하게 궁금한점을 작성해봤습니다.- 블로그에 작성한 것처럼 외부로 분리해서 테스트한게 맞았을까요??- @WithMockUser에 대해 제가 정확하게 이해한게 맞을까요??- 틀리거나 부족한 내용은 없을까요??좋은 하루보내세요 감사합니다.
-
Practical Testing: 실용적인 테스트 가이드
github 관련 질문
강사님의 강의를 듣기 시작한 학생입니다.제 개인 github에 강의에서 들은 내용을 정리하며 들을라 하는데,코드를 작성하신 것을 올려도 될까요?
-
Practical Testing: 실용적인 테스트 가이드
모든 계층에 테스트 코드를 작성하는건 비효율적일까요?
강사님의 훌륭한 강의를 듣고 현재 진행하고 있는 프로젝트에 테스트 코드를 작성하려고 합니다.프로젝트 크기는 크지만(개인적인 생각) 아직 테스트 코드는 작성하지 않았고, 해당 프로젝트는 계층형 아키텍처로 이루어져있습니다.개인적으로 테스트 코드는 유효성 검사를 하는 Presentation Layer보다는 Domain Layer와 같이 중요하고 복잡한 로직이 있는 곳에 더 필요하다고 생각합니다. 그래서 테스트 코드를 작성하는 것도 비용이라고 생각해서 우선은 도메인 로직과 관련된 테스트 코드를 작성하고 컨트롤러와 같이 적은 역할을 하는 곳에 테스트 코드를 차례대로 작성하려고 합니다.테스트 코드를 작성한 경험이 없어서 부족한 점이 많은데 이렇게 테스트 코드를 프로젝트에 도입하는게 맞을까요?강사님의 의견이 궁금합니다!그리고 실무에서도 프로덕션 코드에 맞는 테스트 코드를 모두 작성하시는지 아니면 필요하다고 생각하는 곳에만 작성하시는지도 궁금합니다.
-
Practical Testing: 실용적인 테스트 가이드
안녕하세요 아직 다 못봤지만 질문이 있습니다.
강의에서는 controller 만 Mock를 사용했는데 service쪽도 테스트할떄도 Mock으로 테스트를 진행자주 하나요? 2. 이건 개인적인 취향일수도 있는데 dto를 생성할때 재사용성이 없는 class에 내부 클래스 즉 static class를 만들어서 여러개의 class를 만들어서 사용하는 방법도 하시던데 어떤걸 선호 하시나요?
-
스프링 핵심 원리 - 고급편
콘솔 로그를 테스트하는 방법에 대해 알아봤습니다.
void 메서드는 어떻게 테스트해야할 지 고민해본 적은 있었는데, 콘솔 로그가 원하는대로 나오는지 테스트는 해본적이 없는 것 같습니다. 좋은 것 배워갑니다. class LogTrackerV1Test { @Test void begin_end() throws Exception { // given ListAppender<ILoggingEvent> listAppender = new ListAppender<>(); Logger logger = (Logger) LoggerFactory.getLogger(LogTrackerV1.class); logger.addAppender(listAppender); listAppender.start(); LogTrackerV1 tracker = new LogTrackerV1(); // when TraceStatus status = tracker.begin("hello"); tracker.end(status); // then List<ILoggingEvent> testLogs = listAppender.list; assertThat(testLogs).hasSize(2); assertThat(testLogs.get(0).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello"); assertThat(testLogs.get(0).getLevel()).isEqualTo(Level.INFO); assertThat(testLogs.get(1).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello\\stime=[0-9]*ms"); assertThat(testLogs.get(1).getLevel()).isEqualTo(Level.INFO); } @Test void begin_exception() throws Exception { // given ListAppender<ILoggingEvent> listAppender = new ListAppender<>(); Logger logger = (Logger) LoggerFactory.getLogger(LogTrackerV1.class); logger.addAppender(listAppender); listAppender.start(); LogTrackerV1 tracker = new LogTrackerV1(); // when TraceStatus status = tracker.begin("hello"); tracker.exception(status, new IllegalArgumentException()); // then List<ILoggingEvent> testLogs = listAppender.list; assertThat(testLogs).hasSize(2); assertThat(testLogs.get(0).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello"); assertThat(testLogs.get(0).getLevel()).isEqualTo(Level.INFO); assertThat(testLogs.get(1).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello\\stime=[0-9]*ms ex=[a-zA-Z.]*"); assertThat(testLogs.get(1).getLevel()).isEqualTo(Level.INFO); } }