Justin의 개발 로그
article thumbnail
The Economics of TDD (TDD의 경제성)

[원본 문서] https://semaphoreci.com/blog/economics-of-tdd The Economics of TDD - Semaphore TDD can help you accelerate development and reduce costs over a project’s lifecycle. semaphoreci.com [번역] 관리 관점에서 테스트 주도 개발(TDD) 도입을 설득하기 어려울 수 있습니다. 이는 상대적으로 큰 초기 투자를 수반하고, 명백한(정량적, 사업적으로 보여줄 수 있는) 비즈니스 이점이 없으며, (가장 중요한) 고객(회사)은 테스트가 아닌 기능에 대해 개발 비용에만 주로 관심이 있습니다. 그렇지만, 프로젝트의 다음 이정표에 도달하기 위해 테스팅(TDD)을 줄이려는 유혹..

TDD Mockito 기초 사용법

Gradle.build 설정 dependencies { testCompile('org.junit.jupiter:junit-jupiter-api') testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine') testImplementation ('org.mockito:mockito-core:2.26.0') } [테스트 코드] package mock; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock..

TDD - Junit4, Junit5 예외 테스트 방법

-- Junit5 예외 테스트 샘플 //빌링 금액 단위가 맞지 않으면 에러 처리 if(amount % AMOUNT_OF_MONTH != 0) { throw new InvalidParameterException("금액이 잘 못 되었습니다."); } -- Junit5 예외 발생 + 세부항목 검증 @Test void 빌링_금액예외테스트() { Billing bill; InvalidParameterException exception = assertThrows(InvalidParameterException.class, () -> new Billing(1, LocalDate.now(), 11000) ); assertEquals("금액이 잘 못 되었습니다.", exception.getMessage()); } -- J..

article thumbnail
[TDD]Springboot + Gradle + Jacoco 커버리지 확인

새 프로젝트 설정 IntelliJ -> File -> New Project Gradle, Java, Web 체크 후 [Next] Name 설정 -> [Finish] brew install gradle build.gradle 수정 //[AS-IS] plugins { id 'java' id 'war' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } ... 생략 //[TO-BE] plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id 'java' id..

article thumbnail
[Spring Boot] 테스트에 Spring Security 적용하기

구글, 네이버 로그인 구현을 완료했고 기존 테스트에 시큐리티 적용으로 문제가 되는 것을 해결한다. 기존 테스트 코드에서는 API를 바로 호출하도록 구성되어 있었다. 그러나 시큐리티 옵션이 활성화되면 인증된 사용자만이 API를 호출할 수 있다. 기존 API 테스트 코드들은 인증에 대한 권한을 받지 못해 테스트 코드마다 인증한 사용자가 호출한 것처럼 작동할 수 있도록 수정해야 한다. 우선 전체 테스트를 수행해본다. 전체 테스트 수행하기 인텔리제이 화면 우측의 Gradle 탭을 누른 뒤 Tasks - verification - test를 차례로 선택한 뒤 전체 테스트를 수행한다. 전체 테스트를 수행하면 위와 같은 결과가 나온다. 문제 1. Test 환경 구성 src/main과 src/test의 환경은 독자적인..

TDD 기능 명세, 설계

테스트 코드 작성 클래스 이름 메서드 이름 메서드 파라미터 실행 결과 TDD의 시작은 이름 이름은 설계에서 매우 중요하다. 이해할 수 없는 이름, 이름과 다른 동작을 하는 객체(잘 못 지어진 이름) 등은 두고두고 개발자를 힘들게 만든다. 테스트를 통과할 만큼만 코드를 작성한다. TDD는 테스트를 통과할 만큼만 코드를 작성한다. 필요할 것으로 예측해서 미리 코드를 만들지 않는다. 설계도 동일하게 미리 예측해서 코드를 먼저 만들지 않는다. 실제 테스트 사례를 추가하고 통과시키는 과정에서 필요한 만큼만 조금씩 설계를 변경한다. 예외 처리 : Exception 타입을 미리 만들지 않는다. 테스트를 진행하는 과정에서 실제 예외가 필요한 시점에 Excetion을 도출한다. TDD로 개발을 진행하게 되면 TDD로 개..

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력해주세요.
TDD 테스트 코드 작성 순서

구현하기 쉬운 테스트부터 시작하기 구현이 쉬운 테스트 케이스부터 시작한다. 한 번에 많은 부분을 수정해서 테스트하지 않는다. 테스트에 통과한 즉시 리팩토링 한다. 새로 추가한 코드에서 리팩토링이 필요한 부분이 있는지 즉시 검토한다. 코드가 추가되고, 테스트를 통과(버그x)할 때마다 리펙토링을 하면, 많은 코드를 한꺼번에 리팩토링해서 발생하는 side effect을 최소화 할 수 있다. 예외 테스트 케이스에서 정상적인 케이스로 테스트 진행 다양한 예외 상황은 복잡한 if-else 블록을 양산할 수 있다. 예외 상황을 고려하지 않고, 개발된 코드에 나중에 예외 상황을 반영하려면 코드의 구조를 바꿔야 하는 경우가 생기거나, 코드 중간에 예외 사항을 처리하기 위한 if 블록이 추가되면서 복잡도가 증가하게 된다...

article thumbnail
TDD 맛보기 - 일단 실습을 통해 TDD를 경험해 본다.

TDD는 테스트부터 시작한다. 먼저 테스트를 하고 그 다음에 구현을 한다. TDD 개발 순서 테스트 코드를 먼저 작성한다. 개발하고자 하는 기능이 올바르게 동작 했을 때의 결과를 확인 가능한 테스트 코드를 먼저 작성한다. 테스트 코드에 올바르게 동작하는 기능을 개발한다. 비밀번호 복잡도 평가 로직 개발 /** * 비밀번호 보안 수준 테스트 * [보안 수준 조건] * -길이 8글자 이상 * -0~9 사이의 숫자를 포함 * -대문자 포함 * * 위의 세 가지 조건을 충족하면 암호는 강함. * 2개의 조건을 충족하면 보통. * 1개 이하의 조건을 충족하면 약함. * 비밀번호가 공백(Empty)이거나, 없으면 인식불가. */ 비밀번호 복잡도의 테스트 로직을 아래와 같이 만든다. 테스트 대상 클래스명 테스트 대상..

article thumbnail
IntelliJ에서 TDD 개발 환경 준비

IntelliJ에 Java 프로젝트 생성 [File] -> [New] -> [Project...] 아래와 같이 [Java], [Java 1.8]을 선택 후 Next 클릭 템플릿 선택하지 않고, [Next] 클릭 Project name과 경로를 입력 후 [Finish] Junit 5 라이브러리 추가 [File] -> [Project Structure...] 실행 좌측에서 [Modules] 선택 후 우측에서 [Dependencies] 탭 선택 [+]버튼 클릭 후 [Library...] -> [From Maven...] 클릭 검색창에 "org.junit.jupiter:junit-jupiter:5.5.0" 입력 -> [OK] 클릭 org.junit.jupiter:junit-jupiter:5.5.0 Configu..