🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

블로그

레이

[인프런 워밍업 클럽 4기 - BE 클린 코드 & 테스트 코드] 4주차 발자국 👣

👣 4주차 발자국 💻 강의 수강👩🏻‍💻 학습 내용 요약Test DoubleDummy, Fake, Stub, Spy, MockMockito, BDDMockito@Mock, @MockBean, @Spy, @SpyBean, @InjectMockTest FixtureParameterized Test, Dynamic Test테스트 환경 통합private 메서드의 테스트, 테스트에서만 필요한 메소드 🤔 학습 회고이번 주 또한 저번 주처럼 해커톤과 이력서 작성으로 강의를 나중에 몰아서 듣게 되어 아쉬운 한 주였습니다..완강을 하긴 했지만 무조건 복습해야 체화할 수 있겠다는 생각이 드는 미션과 중간 점검이었습니다. 🎯 다음 주 학습 목표중간 점검에서 말씀해 주신 부분을 체크하면서 미션 다시 해보기  ✉ 미션💭 미션 해결 과정Day 16 미션Layered Architecture 구조에서 레이어마다 어떤 특징이 있는지, 어떻게 테스트하면 좋을지 저만의 언어로 정리해보기 위해서 강의 내용을 복습하면서 진행하였습니다.  Day 18 미션@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 정리하기 위해서 강의를 복습하고, 복습하면서 궁금해진 내용도 찾아가며 진행하였습니다.  🤔 미션 회고역시 늘 느끼는 건데 강의를 듣고 저만의 언어로 정리하는 것이 생각보다 쉽지 않습니다. 그건 제가 강의를 체화하지 못했다는 의미 같기도 해서 복습으로 이해해야겠다고 느끼게 됩니다.2차 중간 점검에서 Day 18 미션의 핵심은 중복 제거가 아닌 '도메인'이라고 하셨습니다. 도메인에 대해서 다시 한 번 생각해보았습니다. 테스트하려는 목적 대상이 무엇인지 항상 생각하면서 진행해야겠습니다.   👨🏻‍💻 강의 출처Practical Testing: 실용적인 테스트 가이드 

워밍업클럽백엔드소프트웨어_테스트junit5SpringJPAMockito

레이

[워밍업 클럽 4기 - BE 클린 코드 & 테스트 코드] Day 18 미션

🎯 Day 18 미션 1⃣번 미션@Mock단위 테스트에서 사용할 가짜 객체를 직접 생성한다.@MockBean mock 객체를 생성하고, 스프링 컨텍스트에 직접 등록한다.@Spy실제 객체를 기반으로, 일부를 stub 할 수 있다.@SpyBeanspy 객체를 생성하고, 스프링 컨텍스트에 직접 등록한다.@InjectMocks 테스트 클래스에 mock이나 spy 객체들을 의존성 주입해준다.  2⃣번 미션댓글 작성과 수정에 대해 테스트할 때, 사용자와 게시물은 무조건 필요하므로 @BeforEach에 넣어주었습니다.@BeforeEach void setUp() { 1-1. 2-1. 3-1. 사용자1 생성에 필요한 내용 준비 1-2. 2-2. 3-2. 사용자1 생성 1-3. 2-3. 3-5. 사용자1의 게시물 생성에 필요한 내용 준비 1-4. 2-4. 3-6. 사용자1의 게시물 생성 } @DisplayName(""사용자가 댓글을 작성할 수 있다."") @Test void writeComment() { // given 1-5. 댓글 생성에 필요한 내용 준비 // when 1-6. 댓글 생성 // then 검증 } @DisplayName(""사용자가 댓글을 수정할 수 있다."") @Test void updateComment() { // given 2-5. 댓글 생성에 필요한 내용 준비 2-6. 댓글 생성 // when 2-7. 댓글 수정 // then 검증 } @DisplayName(""자신이 작성한 댓글이 아니면 수정할 수 없다."") @Test void cannotUpdateCommentWhenUserIsNotWriter() { // given 3-3. 사용자2 생성에 필요한 내용 준비 3-4. 사용자2 생성 3-7. 사용자1의 댓글 생성에 필요한 내용 준비 3-8. 사용자1의 댓글 생성 // when 3-9. 사용자2가 사용자1의 댓글 수정 시도 // then 검증 }  👨🏻‍💻 강의 출처Practical Testing: 실용적인 테스트 가이드 

백엔드워밍업클럽백엔드소프트웨어_테스트junit5SpringJPAMockito

레이

[인프런 워밍업 클럽 4기 - BE 클린 코드 & 테스트 코드] 3주차 발자국 👣

👣 3주차 발자국 💻 강의 수강👩🏻‍💻 학습 내용 요약Layered Architecture -> 관심사의 분리라이브러리 vs 프레임워크Persistence Layer: Data Access 역할Business Layer : 비즈니스 로직 구현, Persistence와 상호 작용, 트랜잭션 보장, 동시성 고민Presentation Layer: 외부 요청, Mocking, MockMvc @SpringBoot vs @ DataJpaTest 🤔 학습 회고최근 테스트 코드를 작성할 일이 많았지만, 명확한 기준 없이 작성하고 있었습니다. 강의를 통해 테스트 작성의 기준이 점차 명확해지고 있어서 도움이 많이 됩니다! 이번 주는 직무 과제와 이력서 작성으로 인해 너무 바빠서 강의가 밀렸습니다.. 아쉬운 한 주였습니다.. 🎯 다음 주 학습 목표라이브 세션 듣고 미션 다시 진행해 보기  ✉ 미션💭 미션 해결 과정Day 11 미션문서를 작성한다는 생각으로 다양한 엣지 케이스에 대한 테스트 코드를 작성하려고 노력했습니다.  🤔 미션 회고강의를 들을 때는 할 만 하겠다고 생각했지만, 막상 직접 과제를 진행해 보니 생각보다 쉽지 않았습니다.테스트 코드를 문서로 접근하니 어디까지 작성해야 할지에 대한 범위 설정이 고민되었습니다.과제를 진행하면서 이 정도까지 테스트를 진행해야 하는가에 대한 의문이 많이 들었습니다.  👨🏻‍💻 강의 출처Practical Testing: 실용적인 테스트 가이드 

백엔드워밍업클럽백엔드소프트웨어_테스트junit5SpringJPAMockito

고리오영감

[인프런 워밍업 클럽 스터디 2기 백엔드] 4주차 발자국

개요4주차 종료!Practical Testing 실용적인 테스팅 가이드를 완강 했다!인프런 워밍업 클럽 스터디 2기 백엔드 과정... 이것으로 끝!감격스럽다.4주차 공부한 내용권장 진도표에 맞게 진도를 나갔네? 배운 것들1. MockitoMockito 라이브러리를 써봤지만, 사용할 때마다 찝찝한 느낌을 갖고 사용해왔다.이번 주차에 강의를 학습하며 Mockito를 언제 쓰면 좋은지 @MockBean 과 @Mock 의 차이는 무엇인지를 제대로 알 수 있었다. 2. Classicist vs Mockist우빈님은 Classicist 인데, 강의를 들어보니 나도 Classicist가 되었다.정답이 있는 문제는 아니라 상황에 맞게 적절히 Mocking 할 땐 하고, 통합 테스트할 땐 하고 하면 될 듯 하다. 3. Test Fixture 가이드라인다른 강의에서 Fixture를 하나의 클래스로 관리하라고 배웠었다.그래서 그렇게 사용해왔는데, 문제는 원하는 필드를 지정해주고 싶을 때마다 Fixture를 생성하는 메서드가 증가하게 되고,메서드가 증가하면 관리가 너무 어려워지곤 했다. 더군다나 큰 프로젝트 같은 경우 엔티티당 필드가 수 십개가 넘어가는 게 대부분 인데, 이걸 전부 하나의 클래스로 관리하는 건 별로 좋은 방법 같지는 않다.  강의를 통해서 Test Fixture를 어떻게 생성하는 지, 어떻게 생성 메서드를 관리하는 지 배울 수 있었다.  4. 테스트 환경 통합하기테스트 환경을 통합해야 한다는 개념 자체를 몰랐다. 이런 게 가능할 거라 생각도 못했던 것 같다. 강의 들으면서 조금 충격을 받았다. 5. private 메서드를 테스트하고 싶은가? 그러면 책임 분리를 고민해봐라이것도 충격! private 메서드를 테스트하지 말라고 하시는 말씀에"그렇구나, 테스트 안 해도 되네? 개꿀!" 이렇게 생각하며 설렁설렁 듣고 있었는데,private 메서드를 새로운 객체에 public 메서드로 빼놓고 객체간 협력하게 하는 코드를 작성하시는 모습이 인상적이었다.테스트 생각을 많이 하다 보면 자연스레 객체지향에 가까워질 수도 있음을 깨달았다. 6. 학습테스트프로젝트에 쓰고 싶은 새로운 라이브러리를 테스트로 학습하는 건 정말 좋은 방법인 것 같다. 7. Spring REST docsSwagger만 사용해봤는데 Spring REST docs는 들어는 봤지, 이번에 처음 사용해봤다.설정하는 게 어렵긴 한데, 실무에서 많이 쓰인다고 하니 이번에 경험해볼 수 있어서 좋았다. 미션이번 주차에는 Day 15. 미션, Day 18. 미션이 있었다. Day 15. 미션 - Layered Test 작성법 자기만의 언어로 정리하기배운 내용을 다시 한 번 정리하는 거라 어렵진 않았다.https://zircon-neptune-a7d.notion.site/Day-15-Layered-test-124ba1f1340980ddb599f68747a2ddfe?pvs=4 Day 18. 미션 Day 18. 미션 - 1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks의 차이 정리하기역시 배운 내용을 다시 한 번 정리하는 거라 어렵진 않았다.https://zircon-neptune-a7d.notion.site/Day-18-129ba1f134098015983ade0586420ed1?pvs=4 Day 18. 미션 - 2. 수도 코드로 작성된 테스트 3개의 코드를 재배치하기제시된 수도 코드@BeforeEach void setUp() { ❓ } @DisplayName("사용자가 댓글을 작성할 수 있다.") @Test void writeComment() { 1-1. 사용자 생성에 필요한 내용 준비 1-2. 사용자 생성 1-3. 게시물 생성에 필요한 내용 준비 1-4. 게시물 생성 1-5. 댓글 생성에 필요한 내용 준비 1-6. 댓글 생성 // given ❓ // when ❓ // then 검증 } @DisplayName("사용자가 댓글을 수정할 수 있다.") @Test void updateComment() { 2-1. 사용자 생성에 필요한 내용 준비 2-2. 사용자 생성 2-3. 게시물 생성에 필요한 내용 준비 2-4. 게시물 생성 2-5. 댓글 생성에 필요한 내용 준비 2-6. 댓글 생성 2-7. 댓글 수정 // given ❓ // when ❓ // then 검증 } @DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.") @Test void cannotUpdateCommentWhenUserIsNotWriter() { 3-1. 사용자1 생성에 필요한 내용 준비 3-2. 사용자1 생성 3-3. 사용자2 생성에 필요한 내용 준비 3-4. 사용자2 생성 3-5. 사용자1의 게시물 생성에 필요한 내용 준비 3-6. 사용자1의 게시물 생성 3-7. 사용자1의 댓글 생성에 필요한 내용 준비 3-8. 사용자1의 댓글 생성 3-9. 사용자2가 사용자1의 댓글 수정 시도 // given ❓ // when ❓ // then 검증 }제시된 수도 코드는 중복이 많아 보인다. 깔끔하게 정리해보는 미션이었다.내가 재배치한 결과는 아래와 같다.@BeforeEach void setUp() { 1-1. 사용자 생성에 필요한 내용 준비 1-2. 사용자 생성 1-3. 게시물 생성에 필요한 내용 준비 1-4. 게시물 생성 } @DisplayName("사용자가 댓글을 작성할 수 있다.") @Test void writeComment() { // given 1-5. 댓글 생성에 필요한 내용 준비 // when 1-6. 댓글 생성 // then 검증 } @DisplayName("사용자가 댓글을 수정할 수 있다.") @Test void updateComment() { // given 2-5. 댓글 생성에 필요한 내용 준비 2-6. 댓글 생성 // when 2-7. 댓글 수정 // then 검증 } @DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.") @Test void cannotUpdateCommentWhenUserIsNotWriter() { // given 3-3. 사용자2 생성에 필요한 내용 준비 3-4. 사용자2 생성 3-7. 사용자1의 댓글 생성에 필요한 내용 준비 3-8. 사용자1의 댓글 생성 // when & then --> 예외 발생 3-9. 사용자2가 사용자1의 댓글 수정 시도 } 끝! 4주간 알차게 학습했다.미션과 발자국, 두 개 강의 모두 100% 학습해서 뿌듯하다.인프런 워밍업 클럽 스터디 GOOD!  

백엔드테스트Junit5MockitoSpringRestDocs

채널톡 아이콘