분류 전체보기 (32) 썸네일형 리스트형 테스트 코드 개선기 - 테스트 코드에서 얻을 수 있는 인사이트 테스트 코드 개선기 - given 절을 쉽게 구성해보기 이전 글에서 테스트 코드의 given 절을 쉽게 구성하는 방법을 배웠다. 이번 글에서는 필자가 테스트 코드를 작성하면서 알게된 테스트 코드에서 얻을 수 있는 인사이트에 대해서 알아보려고 한다.1. 테스트 코드는 만능이 아니지만, 리팩터링의 든든한 버팀목이다.테스트 코드를 작성한다고 해서 모든 버그가 사라지고 기능이 완벽하게 동작한다고 믿는 것은 오해다. 테스트 코드는 만능이 아니며, 우리가 작성한 코드에는 언제나 예상하지 못한 버그가 존재할 수 있다. 그럼에도 불구하고, 테스트 코드는 리팩터링의 든든한 버팀목 역할을 한다. 테스트 코드의 가장 큰 장점은 프로덕션 코드를 수정하더라도 기존 기능이 정상적으로 동작한다는 확신을 준다는 점이다. 지속적으로 .. 테스트 코드 개선기 - given 절을 쉽게 구성해보기 올해 하나의 프로젝트에서 3번의 테스트 코드 리팩터링을 진행했다. 프로젝트 내에서 테스트 케이스의 수는 약 200여개로 유지되었는데, 200여개의 테스트 코드에서 3번의 리팩터링이 진행되며 코드의 구조가 바뀌었다. 테스트 코드를 많이 작성해보지 않은 개발자도 손쉽게 테스트 코드를 작성할 수 있게 하면서 프로젝트 초반에 테스트 코드를 가지고 가면서 개발 생산성을 높힐 수 있는 방법을 찾는 것이 목표였다. 따라서 다음과 같은 결론을 얻었다. 원하는 테스트를 하기 위해 필요한 데이터가 존재해야하는데, 이 데이터를 얼마나 손쉽게 만들 수 있느냐가 관건이었다. 수백번의 테스트 코드 작성과 3번의 리팩터링에서 깨달은 내용을 녹여보겠다. 이 글은 단위테스트, 통합테스트를 구분해서 설명하지 않는다. 좋은 테스트 작.. API DTO 개수 관리하기 1. 문제 상황프로젝트에서 API 스펙을 위한 DTO를 사용하고 있습니다.API 스펙을 위한 DTO는 재사용이 불가능합니다. 클라이언트의 요구사항이 바뀌면 API 스펙 또한 바뀌게 되고, API 스펙을 정의한 DTO도 변하게 됩니다. 아래 코드를 보면 API 응답으로 JSON으로 반환하게 됩니다.카페 스터디 목록 조회를 했을 때 응답으로 받는 API 스펙입니다.카페 스터디에 대한 정보인 cafeStudyInfo, 작성자에 대한 정보인 wirterInfo, 카페에 대한 정보인 cafeInfo 가 존재합니다.{ "hasNext": true, "nextPage": 1, "content": [ { "cafeStudyInfo": { "id": 1, "name": "스.. 내가 자주 쓸 리눅스 명령어 In 명령어파일이나 디렉토리의 링크를 생성하는 데 사용한다.심볼릭 링크(Symbolic Link) : 다른 파일이나 디렉토리의 경로를 참조하는 파일이다. 심볼릭 링크는 파일 시스템의 또 다른 항목을 가르키는 포인터 역할을 한다. 심볼릭 링크를 통해 원본 파일이나 디렉토리에 접근할 수 있지만, 원본 파일이 삭제되거나 이동되면 심볼릭 링크는 깨진다.-s 옵션 : 심볼릭 링크를 생성하라는 의미source_file : 원본 파일 또는 디렉토리의 경로link_name : 생성할 링크의 이름ln -s source_file link_nameln -s /mnt/c/Users/DONGHYUN\ KIM/OneDrive/Escritorio/cafegory2 ~/cafegory2# 위 명령어 실행후 아래 명령어로 이동cd ~.. 자바의 LocalTime와 MariaDB(MySQL)의 TIME 의 관계 테스트를 리팩토링하는 과정에서 오류가 발생했다.테스트에서 @Transactional을 제거했더니 또 오류가 발생했다. (@Transactional 를 제거하니 트러블 슈팅을 정말 많이하는구나....) 테스트 클래스 또는 메서드 레벨에서 트랜잭션이 시작하게 되면 트랜잭션과 JPA의 영속성 컨텍스트의 생명주기는 동일하다. 또한 엔티티를 저장할 때 flush 하고 clear 해주지 않으면 1차 캐시에서 엔티티를 조회해온다.테스트에서는 1차 캐시에서 조회해올 때는 정상적으로 동작한다고 생각하지만, 실제 프로덕션 코드에서는 동작하지 않는 문제였다. False Negative 상황이다.False Negative (거짓 부정) : 실제로 긍정적인 상태(오류가 있는 상태)인데도, 테스트나 시스템이 부정적(오류가 없는 .. Jpa의 영속성 전이와 테스트의 스프링 트랜잭션 전파 테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각얼마 전에 2개의 핫한 컨텐츠가 공유되었다. 존경하는 재민님의 유튜브 - 테스트에서 @Transactional 을 사용해야 할까? 존경하는 토비님의 페이스북 2개의 컨텐츠에서 테스트 데이터 초기화에 @Transajojoldu.tistory.com 테스트에서의 @Transactional 사용에 대해 질문이 있습니다. - 인프런안녕하세요 토비 선생님!강의 너무 재밌게 잘 듣고 있습니다. 이제 몇개 남지 않아서 많이 아쉽네요.다름이 아니라 테스트 코드 작성시 `@Transactional` 어노테이션의 사용에 대해 질문이 있습니다.www.inflearn.com 최근에 향로님 블로그를 보면서 테스트 초기화에 @Transactional 을.. [단위 테스트] 단위 테스트의 세 가지 스타일 단위 테스트는 세 가지 스타일이 있다.출력 기반 테스트 (output-based testing)상태 기반 테스트 (state-based testing)통신 기반 테스트 (communication-based testing)하나의 테스트에서 하나 또는 둘, 심지어 세 가지 스타일 모두를 함께 사용할 수 있다. 출력 기반 테스트테스트 대상 시스템(sut)에 입력을 넣고 생성되는 출력을 점검하는 방식이다.출력 기반 테스트 스타일은 전역 상태나 내부 상태를 변경하지 않는 코드에만 적용되므로 반환 값만 검증하면 된다. 이러한 테스트는 side effect가 없고 sut 작업 결과는 호출자에게 반환하는 값 뿐이다. public class PriceEngine { public double calculateDis.. [단위 테스트] 리팩토링 내성 (좋은 단위 테스트의 요소) 리팩토링 내성 : 테스트를 "빨간색"(실패)으로 바꾸지 않고 기본 애플리케이션 코드를 리팩토링 할 수 있는지에 대한 척도다. 이러한 상황을 상상해보자.새로운 기능을 개발했으며 모든 것이 잘 동작한다.기능이 제 역할을 하고 있으며, 모든 테스트가 동작하고 있다.이제 코드를 정리하기로 결정했다.여기에 리팩토링을 조금하고 저기를 조금 고치면 모든 것이 전보다 훨씬 좋아 보인다.단 하나, 테스트가 실패하고 있다는 것만 빼면 말이다.리팩토링으로 정확히 무엇이 고장 났는지를 자세히 살펴봤지만, 알고 보니 아무것도 고장 나지 않았다.기능은 예쩐과 같이 완벽하게 동작한다.문제는 기반 코드를 수정하면 테스트가 빨간색으로 바뀌게끔 작성됐다는 것이다.그리고 실제로 기능이 작동하지 않는지는 상관없다. 이러한 상황을 거짓 양.. 이전 1 2 3 4 다음