본문 바로가기

테스트 코드5

10. Spring Batch 가이드 - Spring Batch 테스트 코드 배치 애플리케이션이 웹 애플리케이션 보다 어려운 점을 꼽자면 QA를 많이들 얘기합니다. 일반적으로 웹 애플리케이션의 경우 전문 테스터 분들 혹은 QA 분들이 전체 기능을 검증을 해주시는 반면, 배치 애플리케이션의 경우 DB의 최종상태라던가 메세징큐의 발행내역 등 개발자들이 직접 확인해주는 것 외에는 검증 하기가 쉽진 않습니다. (별도의 어드민을 제공하는것도 포함입니다.) 더군다나 개발자가 로컬 환경에서 배치 애플리케이션을 수행하는 것도 많은 수작업이 필요합니다. 수정/삭제 등의 배치 애플리케이션이라면 한번 수행할때마다 로컬 DB의 데이터를 원복하고 다시 수행하는 작업을 반복해야 합니다. 이러다보니 당연하게 테스트 코드의 필요성이 많이 강조됩니다. 다행이라면 배치 애플리케이션은 웹 애플리케이션 보다 테스트.. 2019. 10. 17.
테스트 코드에선 LocalDate.now()를 쓰지말자. 여러 사람의 코드를 볼때 가끔 테스트 코드에서 LocalDate.now() 를 사용하는걸 종종 보게 됩니다. 아무래도 편하게 작성할 수 있다보니 사용된것 같지만, 이는 좋은 패턴이 아닙니다. 그래서 예제로 테스트 코드에서 LocalDate.now()를 쓰면 안되는 이유를 소개하겠습니다. 예제 예를 들어 다음과 같은 코드가 있다고 가정합니다. 배송 예정일을 구합니다. 배송 예정일은 주문일 +3 영업일입니다. 즉, 월요일에 주문했다면 +3일인 목요일을, 목요일에 주문 했다면 금/월/화로 되어 화요일이 배송 예정일이 됩니다. 주말외에 공휴일 판단을 위해 공휴일 여부 판단 엔티티가 존재합니다. 위 조건을 만족하는 2개의 엔티티 클래스들입니다. 첫번째는 공휴일 여부를 가지는 엔티티입니다. @Getter @NoAr.. 2019. 5. 3.
@SpyBean @MockBean 의도적으로 사용하지 않기 보통 스프링 부트 관련 테스트 코드를 작성할때 @MockBean과 @SpyBean 를 사용했습니다. (참고: SpringBoot @MockBean, @SpyBean 소개) 복잡한 스프링 프로젝트에서도 원하는 코드만 아주 간단하게 Mock 처리를 할 수가 있어 정말 많이 사용했습니다. 그러다 최근에 Spring Boot Cloud 프로젝트의 테스트 코드를 보면서 제가 완전히 잘못하고 있음을 깨달았는데요. 대부분의 테스트 코드가 @MockBean, @SpyBean없이 작성되있었습니다. 마침 정진욱님의 발표도 봤던지라, 저도 @MockBean과 @SpyBean없이 테스트 코드 작성을 시도해보니!완전 큰 깨달음을 얻었습니다. 샘플 예제로 한번 소개드리겠습니다. 예제 예를 들어서, AWS SQS로 메세지를 보내는.. 2018. 7. 21.
Gradle + SpringBoot + Travis CI + Coveralls + 텔레그램 연동하기 최근에 개인프로젝트를 진행하면 무조건 진행하는 것이 바로 CI 연동입니다. 지속적으로 통합 빌드/테스트가 된다는게 개인 프로젝트에서는 정말 큰 도움이 됩니다. 개인프로젝트에서 CI연동을 하면 다음과 같은 작업이 자동화됩니다. 하나의 기능을 수정 혹은 추가 후 Git Push -> Travis CI에서 통합 빌드 및 테스트 -> Coverall에서 테스트 커버리지 관리 -> 텔레그램으로 CI 결과 알람 물론 여기서 AWS CodeDeploy나 다른 CD 툴을 사용한면 배포까지 자동화 시킬수 있습니다. 관련된 내용은 스프링부트로 웹 서비스 출시하기 - 6. TravisCI & AWS CodeDeploy로 배포 자동화 구축하기를 참고해보세요! 앞서 스프링부트로 웹 서비스 출시하기 시리즈에서 CI/CD 환경을 .. 2018. 3. 10.
Generic 타입 추론시 주의할 점! (super type token 문제) 요즘 박재성(a.k.a자바지기)님의 강의를 들으며 부쩍 TDD를 사용하려고 노력중이다.그래서 회사일을 하면서도 최대한 테스트 코드를 적용중이다.진행 도중 기존 코드에서 인자값으로 받는 API 주소와 리턴타입만 다른 여러 메소드들이 있어 이를 리팩토링 하는 과정에서 테스트 코드를 작성하다가 이상함을 발견하였다. 의도한 바와 다르게 데이터 형변환이 되는 것이다. 회사 코드를 직접 올린순 없어서 대충 비슷하게 코드를 작성해 보았다. 블로그에는 사진으로 코드를 설명하겠다.(자세한 코드는 Github에 올려놓았다.) 아래와 같은 json 데이터가 있다고 가정하자. 위 데이터를 받아서 처리 하기 위해 2개의 POJO를 만들었다. 그리고 이를 시험할 테스트 코드는 아래와 같다. 보다시피 DataResponse이냐 D.. 2016. 7. 20.