본문 바로가기

반응형

TDD

(10)
TDD 학습 및 실습 정리9(예제연습) TDD 학습 및 실습 정리8에 이어 정리합니다. 자판기 만들기 예제이며 TDD 학습 및 실습의 마지막입니다. 자동 판매기 잔돈 계산 모듈음료 자판기에 탑재 될 거스름돈 반환 모듈 개발 업무를 맡게 되었습니다. - 최소 개수의 동전으로 잔돈을 돌려줍니다.ex) 1000원 넣고 650원짜리 음료를 선택하면 잔돈은 100,100,100,50원으로 반환합니다.- 지폐를 잔돈으로 반환하는 경우는 없다고 가정합니다. TDD 방식으로 개발하면서 어느 정도 걸리는지 측정해봅니다.초중급 개발자는 약 50분정도 소요 된다고 합니다. 책 내용이 먼저 나오고 글쓴이의 내용은 아래에 있습니다. 개발 시작하기바로 개발에 들어가기 보다는 시나리오를 작성합니다.1. 업무 시나리오돈을 넣습니다.-> 투입한 금액이 표시됩니다.-> 투입..
TDD 학습 및 실습 정리8(다양한시각) TDD 학습 및 실습 정리7에 이어 정리합니다. TDD가 주는 설계상의 이점- TDD 자체가 단위의 작은 설계를 만들어냅니다.- 입력, 출력, 모듈이 동작하기 위해 필요한 요소를 파악되며 사전에 테스트됩니다.- 강형 마이크로 디자인이라고도 합니다.- 의존성이 적은 자기 완결성이 높은 모듈이 됩니다. TDD와 객체 지향 프로그래밍(OOP)OOP가 강조되는 이유는 안전한 부품과 재사용성OOP의 기본 원칙 -> 모듈은 높은 응집도를 유지하고 낲은 결합도를 갖도록 만들어야 합니다. 의존 관계가 많은 코드는 테스트 코드 자체를 만들기 어렵게합니다.기능 위주로 테스트를 먼저 작성하다보면 해당 클래스에 필요한 기능인이 아닌지를 바로 알 수 있습니다. 유연한 코드변화에 쉽게 적응할 수 있는 코드지나치게 다양한 선택지가..
TDD 학습 및 실습 정리7(TDD작성패턴) TDD 학습 및 실습 정리6에 이어 정리합니다. 상황별 테스트 생성자 테스트굳이 테스트 케이스를 작성하지 않습니다.초기 값을 가져야 하는 생성자에 따라 생성하여 테스트를 작성합니다.DTO 스타일의 객체 테스트단순 setter/getter로 이루어진 DTO는 굳이 테스트 하지 않습니다.특정 목적을 가진 불변 객체의 경우에는 getter나 is로 테스트를 작성합니다. 닭과 달걀 메소드 테스트메소드가 서로 맞물려 있는 경우로직 메소드(add, remove, set 계열 메소드)와 상태 확인 메소드(get, show, is 계열 메소드)가 짝일 경우 public class Test{ @Test public void add() throws Exception{ User user = new User(); user.a..
TDD 학습 및 실습 정리6(Unitils) TDD 학습 및 실습 정리5에 이어 정리합니다. 실습보다는 어떤 내용이 있는지 확인합니다. Unitils란?단위 테스트를 좀 더 쉽게 만들고 유연하게 사용 할 수 있는 지원 라이브러입니다.다운 잘 클릭해야합니다. Unitils의 기능들 리플렉션 단정문객체 동치성 비교동일성 : 같은 객체인지를 판단동치성 : 객체가 표현하는 상태가 일치하는지를 판단 assertReflectionEquals(예상 객체, 실제 객체, ReflectionComparatorMode); ReflectionComparatorMode 설명 LENIENT_ORDER 컬렉션이나 배열을 비교할 때 순서는 무시합니다. IGNORE_DEFAULTS 예상 객체의 필드 중 타입 기본 값을 갖는 필드에 대해서는 비교를 하지 않습니다. LENIENT_..
TDD 학습 및 실습 정리5(DbUnits) TDD 학습 및 실습 정리4에 이어 정리합니다. 실습보다는 어떤 내용이 있는지 확인합니다. DbUnit란?테스트 프레임워크보다는 테스트 지원 라이브러리에 가깝습니다. DB와 DBMSDB는 다루기 쉽도록 만들어 놓은 논리적 구조의 데이터입니다.DBMS는 DB를 관리하는 시스템입니다. 우리가 쓰고 있는 postgresql, mysql은 DBMS이지요.현업에서는 DB라고 부르기 때문에 딱히 구분하지 않습니다. 데이터셋데이터베이스의 테이블과 같은 형태를 xml이나 csv파일로 비연결지향하는 형태입니다.데이터 베이스는 연결 지향입니다. DbUnit 데이터셋의 종류FlatXmlDataSet- 테이블 이름을 xml, tag 구성요소로 적습니다.- 컬럼 이름은 속성으로 적습니다.- null 값을 넣을 컬럼은 작성하지 ..
TDD 학습 및 실습 정리4(한계극복하기) TDD 학습 및 정리3에 이어 정리합니다. Mock 객체란 - 하나의 예시로 자동차 설계 시 실 재료를 사용하면 비용이 많이듭니다.나무를 대신해서 설계 뜬 자동차 모형을 Mock이라고 합니다.- 제품의 외양을 흉내 낸 모조품 Mock 객체를 사용 해야 하는 시기1. 테스트 작성을 위한 환경 구축- 환경 구축을 위한 작업 시간이 많이 필요 한 경우에 Mock객체를 사용합니다.- 특정 모듈을 아직 갖고 있지 않아서 테스트를 하지 못할 경우입니다.- 타 부서와 협의나 정책이 필요한 경우에도 필요합니다.2. 테스트가 특정 경우나 순간에 의존적 일 경우- 예를 들어 네트워크 연결의 접속 시간 제한을 구현하는 경우접속 시도 실패 후 5초까지 1초마다 재접속 시도 하고 이후엔 에러 메세지를 만들 때- 파일 쓰기 시 ..
TDD 학습 및 실습 정리3(메소드작성법과한계) TDD 학습 및 정리3에 이어 정리합니다. 1. Test 폴더 분리 방법properties - source - add Folder 생성 된 test 폴더를 확인 후 Allow output folders for source folders 클릭하여 build 폴더를 따로 분리합니다. build 되는 class 파일을 main과 분리하기 위해 Edit 클릭 Browse를 선택 bin 아래에 test 폴더를 만들고 apply and close를 클릭하면 적용됩니다. 폴더가 따로 분리 된 것을 확인하고 분리 되지 않으면 project clean을 해봅니다. 2. 테스트 대상 메소드와 이름을 1:1로 일치테스트 대상 코드 : public int getBalance() {...}테스트 코드 : @Test public..
TDD 학습 및 실습 정리2(JUnit에 대하여) TDD 학습 및 실습 정리1에 이어 정리합니다. JUnit의 기본적인 기능 3가지 - 테스트 결과가 예상과 강튼지를 판별해주는 단정문(assertions) - 여러 테스트에서 공용으로 사용 할 수 있는 테스트 픽스처(test fixture) - 테스트 작업을 수행할 수 있게 해주는 테스트 러너(test runner) JUnit을 비롯하여 단위 테스트를 잘 작성하려면 테스트 픽스처를 알아야합니다.테스트 픽스처란테스트를 반복적으로 수행 할 수 있게 도와주고 매번 동일한 결괄르 얻을 수 있는 '기반이 되는 상태나 환경'일관 된 테스트 실행 환경'테스트 컨텍스트'라고 부르기도 합니다.테스트의 작업이나 결과로 만들어진 대상을 통칭합니다. 대표적으로 setUp() 같은 메소드는 테스트 픽스처를 만들고, 정리하는 수..

반응형