본문 바로가기

Programing/테스트

(16)
[test] 404 테스트 404 테스트라는 이름은 그냥 내가 지은 이름이다. 지금 다니는 회사는 PO라고 부르는 기획자도 어느정도 개발 지식을 요구하는 경우가 있다. 데이터 분석을 직접하는 경우가 있어서 SQL 같은 쿼리 언어에 대해 알고 있어야 스스로 일이 가능하다. 또한 swagger 를 통한 API 사용도 하는 경우가 있어서 HTTP에 대한 배경 지식이 필요하다. 그래서 내가 생각해 낸 테스트이다. 물론 이것이 모든 경우에 대해 커버 가능하지는 않지만 해보면 이 사람이 어느정도의 능력을 가지고 있는가 간접적으로 확인해 볼 수 있다. 필요한 것 원가 웹상에 글을 쓰거나 삭제가 가능한 플랫폼을 준비한다. 나의 경우 티스토리 블로그를 이용하는데 이용 가능한 방법은 여러 플랫폼이 있을 것이다. 또한 커뮤니케이션을 위한 도구가 필요..
[Java] Enum에 없는 값을 테스트할 때는 어떻게하지? 통신사 멤버십을 관련 기능을 개발하게 되었다고 하자. (예를 들 때는 현실성이 있는 것이 좋으므로...) 아래와 같은 Enum이 있다고 하자. public enum MembershipType { KT, SKT } 통신사에 따라 사용하는 API가 달라서 묶어주는 구조로 되어 있다고 하자. 물론 다형성을 이용한 전략 패턴을 적용기에 좋은 구조이다. 하지만 갯수가 많지 않아 switch~case로 분기하게 되어 있다고 치자. 코드는 아래와 같이 표현이 가능할 것이다. @Service @RequiredArgsConstructor public class MembershipInspector { private final KtMembershipInspector ktMembershipInspector; private f..
[test] 박*영과 함께하는 spock framework pair programming 제목은 "박*영과 함께하는 spock framework pair programming"이라고 쓰고 사실 꼰대질(?!)을 정리한 것이다. 아마도.. TL;DR (too long, don’t read) 가 될 것 같다. 박*영 님은 같은 회사의 개발자이다. 기존에 jUnit으로 되어 있던 테스트 코드들을 Groovy 기반의 Spock 프레임워크를 도입해서 적용하고 있다고 한다. 처음 접하는 사람들이 공통적으로 겪을 수 있다고 생각해서 공유 및 기록 차원에서 끄적여보았다. 2020-01-14 (화) - 꼰대질1 포인트를 대량 적립해주는 서비스(가칭: MassiveAccumulatingService)에 대한 테스트를 만들고 있었다. 조언 1. 테스트의 이름 - 테스트 대상의 이름을 사용하는 것보다는 테스트가 수..
[sonarqube] 'sonar.jacoco.reportPath' is deprecated 메시지 없애기 sonarqube 태스크를 돌리면 아래와 같은 경고가 나온다. Property 'sonar.jacoco.reportPath' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format). Property 'sonar.jacoco.reportPaths' is deprecated (JaCoCo binary format). 'sonar.coverage.jacoco.xmlReportPaths' should be used instead (JaCoCo XML format). 메시지만 나오면 그러려니 하는데 Sonarqube 페이지에서도 경고가 표시된다. 사용하는 ..
[Pokayoke] 휴먼에러를 어떻게 막지? 1955년 히터가 넘어졌을 때 자동 소화되는 장치가 개발된 이후 히터에 의한 화재가 급격히 감소 - 집의 스팀보이도 바닥이 떨어지면 전원이 차단되는 센서와 스위치가 있었음 - 1964년 난연 재료로 잠옷이 만들어진 이후 화재에 의한 사망률이 급격히 줄어듦
[테스트] 테스트 코드의 회의 어제 버전 18이 배포를 나갔다가 3시간 만에 롤백이 되었다. 이번에 새로 추가된 버전은 심지어 테스트 커버리지가 100%였다. 그런데 배포를 하고 나서 로컬에 새로운 기능 추가를 하는데 이상하게 동작하는 현상이 확인되었다. history성 row가 추가되는데 마지막 row가 아닌 이전 row가 업데이트되는 문제였다. 원인은 기존의 엔티티에서 새로운 엔티티를 만들어서 값을 저장(insert)하고 업데이트(update)를 하는데, 예외가 발생하면 기존의 엔티티에 업데이트를 하는 버그가 있었다. 급하게 롤백을 하고 영향도를 파악하는데 다행히 production 환경에서는 예외가 없었는지 데이터가 꼬이지 않았다. 전에 N모 피처에서는 테스트 코드가 버그를 피하는데 도움을 주었는데 이번에는 해당 로직에 대한 체..
[Spock] when: 및 then: 블럭에서 with 사용하기 Spock에서 기본적인 테스트를 작성했다면 when: 블럭과 then: 블럭에 대해 알 수 있다. when: 블럭에서의 with Groovy 문법에 보면 with 라는 키워드로 같은 객체에 대해 동시에 배정(assignment)을 할 수 있다. 이 기본 그루비 문법은 when: 블럭에서 사용이 가능하다. 예. 과일 아래와 같은 Fruit 클래스와 내부에 Color 열거형(enum)이 있다. import lombok.Getter; import lombok.Setter; @Getter @Setter public class Fruit { private String name; private Color color; private int quantity; @Override public String toString(..
[삽질] Spock : ClientHttpRequestInterceptor 테스트 하기 Spock에서는 Mocking을 할 때 파라미터의 값 같은 조건을 제약해서 정할 수가 있다.Reference: Argument Constrains 전임자가 ClientHttpRequestInterceptor를 구현하여 RestTemplate의 요청과 응답을 가로채서 로그를 찍는 코드가 있었다. 코드는 code.i-harness의 아래 글의 코드와 비슷하게 되어 있다.옵션 2. 인터셉터 사용하기 > 인터셉터 구현https://code.i-harness.com/ko-kr/q/79571a 문제는 RestTemplate의 응답을 하는 외부 API가 응답을 UTF-8로만 하지 않고 EUC-KR로 응답을 주는 경우가 있었다.그래서 한글이 포함되어 있는 경우 로그가 깨져서 보였다. 문제를 해결할 방법은 간단했다. 컨..