스터디/클린코드

Junit에서 테스트 데이터 클리닝 하기

들어가며 책 단위테스트에서 통합테스트를 할 경우 공유 의존성의 초기화에 대해 이야기를 하는 부분이 있다. 공유 의존성은 테스트 컨텍스트를 공유하는 여러 테스트를 같이 실행하면 말 그대로 공유하기 때문에 앞서 실행된 테스트가 뒤에 실행되는 테스트에 영향을 미친다는 것이다. 그렇기 때문에 이 의존성에 대한 초기화 작업이 필요하다. 그렇다면 공유 의존성의 초기화 작업은 언제하는게 좋을까? 이에 대한 대답도 책에서 답해주고 있다. 테스트를 수행하기 전에 초기화를 해주는 것이다. 필자는 예전부터 습관적으로 테스트가 끝나고 마지막에 테스트에 사용된 공유 데이터를 지우는 작업을 했다. 테스트를 수행하면서 필요한 셋업데이터를 만들고 테스트 대상을 검증하며 생긴 데이터가 있으니 이후에 생성된 데이터를 지워야 한다는 생각..

2023.02.28 게시됨

스터디/클린코드

소프트웨어 악취 - 명령 추상화

소프트웨어 악취를 제거하는 리펙토링을 읽고 내용을 재정리하였다. 명령 추상화로 인한 악취 연산 프로세스를 클래스로 표현하는 경우 발생한다. 연산 클래스라고 부르기도 한다. 문제는 클래스 내부에 연산 프로세스를 나타내는 메서드가 단 하나만 존재할 때 발생한다. 보통 다른 메서드의 내부 도우미 메서드로 사용된다. 다시 말해 클래스 내부에서 메서드로 존재해야 하는 연산이 클래스 자체로 표현된 것이다. 특정 개념의 추상화를 표현한 클래스는 데이터와 함께 관련된 메서드를 캡슐화 해야 하는데 그렇지 않을 때 발생한다. 이로 인해 추상화는 설계의 복잡성이 늘어나고 동일 데이터에 대해 동작하는 메서드가 여러 곳에 분리되어 응집성이 줄어들게 된다. 때로는 연산을 객체로 격상시키는 편이 나을 때도 있다. 원인 보통 객체지..

2022.01.06 게시됨

스터디/클린코드

Gradle TestFixtures 이용하여 테스트 코드 중복 줄이기

Gradle Test Fixture 사용해서 테스트 중복코드 줄이기 Gradle Test Fixture 테스트코드를 작성하다보면 테스트 코드에서도 중복된 코드가 굉장히 많이 발생하게 된다. 대표적인 예로 특정 도메인 객체를 생성해야하는 작업이다. 이러한 코드가 작성하기 어렵지는 않지만 그 양이 적지 않아서 테스트 코드를 작성할 때 시간을 잡아먹는 부분이기도 한다. Gradle 에서 제공하는 Test Fixture 기능을 이용하면 이를 쉽게 해결할 수 있다. 코틀린의 경우 gradle 문법만 달라져서 적용하는데 큰 문제 없었다. 예제코드는 Github 에서 확인할 수 있다. 문제 상황 테스트를 위해 간단하게 2개의 모듈을 가진 멀티모듈 구조를 만들었다. application 모듈이 core 모듈 의존성을 ..

2021.10.11 게시됨

스터디/클린코드

Jacoco Counter LINE vs INSTRUCTION

Jacoco Counter Line vs Instruction Jacoco 커버리지 종류에 여러가지가 있지만 Line와 Instruction은 비슷하지만 엄청난 차이를 일으킨다. 커버리지 측정방식이 다른데 Line의 경우 테스트 스레드가 읽고 지나간 소스 코드의 Line을 측정한다. 하지만 Instruction의 경우 지나간 바이트 코드를 측정한다. 위 두 줄을 읽고 이해가 되면 그냥 뒤로가기 눌러서 나가면되고! 이해가 잘 되지 않으면 아래 예제를 통해 확인해 보도록 하자. 설정 build.gradle에 설정은 다음과 같이 하였다. Junit5와 assertJ를 사용하기위해 의존성을 추가하였다. plugins { id 'java' id 'jacoco' } group 'org.javabom' version..

2020.03.15 게시됨

스터디/클린코드

좌충우돌 jacoco 적용기

스터디 블로그 코드블럭 상태가 이상해서 먼저 여기에 올린당.. 좌충우돌 Jacoco 적용기 백기선님의 더 자바 강의를 보던 중 바이트 코드를 다루는 방법의 예시로 jacoco가 언급되었고 테스트 커버리지를 측정하여 build를 성공, 실패 시킬수 있다는 점을 알게되었습니다. 이를 이용하여 ''스터디에서 진행하는 장기 프로젝트와 토이 프로젝트에 적용하면 재미있겠다!' 라는 생각에 적용하며 겪은 내용을 정리해 보고자 합니다! Jacoco 적용하기 단순히 적용하는 것은 어렵지 않았습니다! jacoco 유저 가이드와 우아한 형제들의 jacoco 포스팅을 보면서 쉽게 적용할 수 있었습니다. jacoco plugin 추가 먼저 plugins 블록에 id 'jacoco' 를 추가해 주면 plugins { id 'ja..

2020.02.29 게시됨

스터디/클린코드

객체지향 설계 5원칙 SOLID

객체지향설계 5원칙 SOLID의 이해와 예제 목표 SOLID에 대한 설명을 하는 글은 여러 블로그에 소개가 되어있습니다. 하지만 대부분의 글이 개념적인 설명을 위주로 하고 있을뿐더러, 너무 추상적이라 이해하기 어렵다는 생각을 했습니다. 그래서 저는 이 글을 실제로 코드상에서 어떠한 방식으로 적용되는지 어떻게 의식하고 코드를 작성하는 것이 SOLID를 지킬 수 있는지 이 두 가지에 중점을 두고, 개념적인 설명만 있는게 아닌 예제를 통해 SOLID를 공부하고 이해해 보고자 합니다. 글에서 사용된 예제는 모두 GitHub에 올라가 있습니다. 1. SRP Single Responsibility Principle - 단일 책임의 원칙 한 클래스는 하나의 책임을 가져야 한다. SRP가 지켜지지 않은 코드 publi..

2019.12.18 게시됨

스터디/클린코드

객체지향의 사실과 오해를 읽고

들어가며 학교의 커리큘럼은 C를 배우고 Java를 배우는 순서였습니다. C는 절차지향 언어이고, Java는 객체지향 언어이다. 전혀 이해가 되질 않았습니다. 전혀. 솔직히 지금도 객체 지향에 대해 설명하라고 하면 자신있게 못 할 것 같습니다. Java는 코드의 재사용이 가능하다고 하지만 'C도 메서드 재사용 되지않나?'라는 생각을 했습니다. Java는 그저 알고리즘을 풀기위한 언어 중 한 가지일 뿐이었습니다. 그러다 우연히 대외활동을 하다 다른 친구가 Java를 다루는 것을 보았는데 충격적이었습니다. '와! 내가 작성한 코드는 쓰레기구나!' 제가 작성한 코드는 재활용이 불가능한 코드지만, 친구가 작성한 코드는 재활용도 가능하고 정말 깔끔했습니다. 저는 객체 지향언어를 사용하면서 원칙을 지키지 않았고 친구..

2019.12.04 게시됨