분류 전체보기692 [ATDD] 인수테스트 리팩터링 이번 시간에는 인수 테스트의 리팩터링 과정에 대하여 학습하였다. 1. 인수테스트 리팩터링 인수테스트에서 Command성 쿼리들을 StatusCode만으로 검증할 수 있을까? 실제로 데이터가 저장되었는지 확인해야 할까? 예를 들어 다음과 같은 지하철 삭제 시나리오가 있다고 해보자. Scenario: 지하철 노선을 제거한다. Given 지하철 노선이 등록되어 있다 When 지하철 노선을 삭제 요청한다. Then 지하철 노선이 삭제된다. 이 시나리오를 확인하는 방식은 다음과 같을 것이다. given: 지하철 노선 등록 request 보내기 when: 지하철 노선 삭제 request 보내기 then: 지하철 노선 삭제를 확인하기 방법 1: 지하철 노선 삭제의 응답 코드로 확인 방법 2: 지하철 노선 조회 req.. NEXT STEP/ATDD, 클린 코드 with Spring 5기 2022. 8. 3. [Review] ATDD 3주차 2차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) 공통의 테스트를 만들었어야 하는가? 미션중 TokenAuthenticationInterceptor와 UsernamePasswordAuthenticationFilter 를 추상화 하는 단계에서는, 두 필터에 공통적으로 적용 가능한 테스트를 작성한 후, 공통 부분을 추상화 했어야 할까요? 두 필터의 공통으로적용할 테스트를 작성하기 어렵다 생각되어 새로운 테스트는 작성하지 못하고, 기존의 테스트 코드로 구현하게 된것 같아 아쉽습니다. 리뷰어 님이라면 어떻게 하셨을까요? 의견 궁금합니다!! 답변: 공통의 테스트를 작성하기시 보다는, 구현체 위주의 테스트를 작성한다고 하셨다. 추상 클래스를 기반으로 하는 테스트는 인수테스트 선에서 처리하시는 것 .. NEXT STEP/Review 정리 2022. 8. 3. [TIL] 일일 회고 2022/08/01 요즘 한 일 1. ATDD 리뷰 정리 https://blogshine.tistory.com/485 [Review] ATDD 2주차 4차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) Exception과 Domain #323 (comment) 지난 번 리뷰에 대한 저의 생각입니다 ㅎㅎ 의견 달아주시면 감사하겠습니다! 예외를 나타내는 클래스가 htt blogshine.tistory.com https://blogshine.tistory.com/489 [Review] ATDD 3주차 1차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 와 개인적으로 이번 3주차는 Spring Security를 비슷하게 만든 뼈대 코드 위에서 인증 처리 테스트를 작성하는데, 진짜 어려우면서 꿀잼이.. NEXT STEP/회고록 2022. 8. 1. [IntelliJ] IntelliJ 에서 DSM을 이용하여 패키지 간 의존성 확인하기 1. DSM 이란? DSM은 모듈 간의 관계를 2차원 매트릭에 나타낸 테이블. 테이블을 통해서 모듈 간의 의존관계 / 의존 강도 / 순환 사이클 등을 확인할 수 있다. DSM을 읽는 방법은 열을 기준으로 읽으시면 됩니다. “1번은 3번에 Dependency(의존성)을 가진다 , 3번은 1번, 2번에 의존성을 가진다”라고 읽으면 됩니다. 2. Layered Architectur 레이어드 아키텍처를 DSM으로 확인해보면 다음과 같은 구조를 가지게 될 것입니다. 위의 계층이 아래쪽 계층에만 의존하기 때문이다. 3. Intellij 에서 사용 IntelliJ에서는 Ultimate 버전에 한해서 DSM 플러그인이 기본적으로 제공된다. 메뉴 Code -> Analyze Code -> Dependency Matrix.. BackEnd/기타 2022. 8. 1. [Review] ATDD 3주차 1차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 와 개인적으로 이번 3주차는 Spring Security를 비슷하게 만든 뼈대 코드 위에서 인증 처리 테스트를 작성하는데, 진짜 어려우면서 꿀잼이다. 아직 Spring Security를 공부해본적은 없지만, 큰 틀을 배워가는 것 같아 너무 재미있다. 1. 질문 1-1) 인터셉터 처리 방식 public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SecurityContextPersistenceFilter()); registry.addInterceptor(new UsernamePasswordAuthenticationFilter(loginMemberService).. NEXT STEP/Review 정리 2022. 8. 1. [JPA] JPA metamodel must not be empty! 1. 문제 상황 테스트코드를 작성하던 도중, Controller계층에 @WebMvcTest Slice Test를 하나 추가했더니, JPA metamodel must not be empty! 에러가 발생했다. TestDouble에 필요한 부분들은 전부 Stub을 만들어 줬다고 생각되는데, 어디서 에러가 발생하는지 찾기 어려웠다. 알고보니 객체를 생성하고, 영속화 할때 자동으로 생성시각이 기록되도록 Auditing 기능을 사용하고 있었는데, 이게 문제였다. 2. 원인 우선 나의 메인 메서드라 할 수 있는 IssueTrackerApplicaion.java는 다음과 같다. @EnableJpaAuditing @SpringBootApplication public class IssueTrackerApplication.. BackEnd/JPA 2022. 7. 28. [백준][C++] 17143번: 낚시왕 <237> 직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 생각의 흐름 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 아... 캐어렵다... 구현할 부분이 생각보다 많고, 생각해야 될점도 많다... 먼저 문제의 진행방식을 크게 3단계로 나눌 수 있다. 1. 배열 초기화 하기 2. 사람이 상어 낚시하기 3. 모든 상어 움직이고, 잡아먹기 ▶ 배열 초기화 하기 이때 맨 처음 초기화 가.. Algorithm/백준 2022. 7. 28. [TDD] 테스트를 위한 생성자, 메서드 피하는 방법 스스로 공부하다 경험했던 문제를 해결하기 위해 1. 문제 상황 테스트를 작성하다 보면 검증을 위해 id값을 직접 객체에 추가해줘야 하는 경우들이 있다. 하지만 JPA를 사용할 경우 프로덕션 코드에서는 생성자로 id를 직접 추가해주지 않아도, auto increment를 사용하게 되기 때문에 id값을 직접 할당할 필요가 없다. 따라서 단지 테스트 만을 위한 용도로 id값을 받는 생성자를 만들게 되는 점이 매우 거슬렸다. 예시를 통해 문제의 상황을 구체화 해보자! 우선 우리의 도메인을 시각화하면 다음과 같다. 다음과 같은 예시 코드를 살펴보자. @DisplayName("구간을 성공적으로 추가한다") @Test public void add_section_test() { // given Line line = n.. BackEnd/TDD 2022. 7. 26. [Review] ATDD 2주차 4차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) Exception과 Domain #323 (comment) 지난 번 리뷰에 대한 저의 생각입니다 ㅎㅎ 의견 달아주시면 감사하겠습니다! 예외를 나타내는 클래스가 http status를 상태로 갖는 게 괜찮을까요? => 사실상 Spring에서 벗어날 일이 없을 거라 거의 100% 확신하기 때문에 Spring에 의존적인 부분들을 가져다 사용해도 무방하다 생각합니다! 비즈니스 로직에 대한 예외처리인데, http 라는 프로토콜에 의존하게 된다고 생각합니다. 가장 중요한 도메인에 관련한 클래스들은 외부 기술에 종속되지 않도록 구현하는 것을 추천드립니다 => Entity Class 즉, Domain안에서는 HttpStatus에 대한 import가 없.. NEXT STEP/Review 정리 2022. 7. 26. [백준][C++] 10775번: 공항 <236> 직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 원래 나의 첫 풀이는 Greedy 방식으로 매우 직관적인 코드를 작성했었다. 그냥 맨 뒤부터 확인하면 되겠다 생각 하였다. 따라서 맨 처음 나의 코드는 다음과 같았다. (73%에서 시간 초과 나는 코드) #include #include using namespace std; #define MAX 100001 int G, P; int cnt; vector air; bool gate[MAX]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> G >> P; for (in.. Algorithm/백준 2022. 7. 26. [TIL] 일일 회고 2022/07/25 요즘 한 일 1. ATDD 리뷰 정리 2차, 3차 PR에 대한 리뷰를 정리하였다. 부족한 부분이야 항상 많지만, 다양한 주제로 리뷰어와 예기할 수 있어 좋다! https://blogshine.tistory.com/479 [Review] ATDD 2주차 2차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! https://github.com/next-step/atdd-subway-path/pull/299 2단계 - 지하철 구간 추가 리팩터링 by zbqmgldjfh · Pull Request #299 · next-step/atdd-subway-pat.. blogshine.tistory.com https://blogshine.tistory.com/482 [Review] ATDD 2주차 3차 PR 권승철 .. NEXT STEP/회고록 2022. 7. 25. [Review] ATDD 2주차 3차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) CustomException의 사용 이번에 CustomException을 좀더 세분화 하기위해, 기존의 SectionException을 SectionsAdd, SectionsDelete 별로 나눠 CustomException을 구현하게 되었습니다. 그보다 더 세부적인 내용들은 예외 안에서 메시지로 구별하였습니다! 우선 모든 예외가 공통적으로 상속받을 BusinessException을 구현하였습니다. 해당 class 안에는 HttpStatus를 저장 할 수 있습니다. public class BusinessException extends RuntimeException { private final HttpStatus httpStatus; pu.. NEXT STEP/Review 정리 2022. 7. 25. 이전 1 ··· 15 16 17 18 19 20 21 ··· 58 다음