Delphi에서 TDD이용하기
From YYpBD's MediaWiki
목차 |
[편집]
개요
Delphi에는 TDD를 쉽게 작업할 수 있도록 DUnit를 제공한다.
2005버전부터 포함되어 있으니 기존 버전 이용자라면 DUnit를 다운받아 설치해서 이용가능하다.
[편집]
Check
Test가 성공했으니 실패했느냐를 체크하는 함수들이다.
테스트케이스 함수에서 Check 함수들을 호출하여 결과를 확인할 수 있다.
사실 Check 함수 하나로 모든 작업이 가능하나 Memory 체크나, Bin, Hex등 유용하게 이용할수 있는 함수가 많으니 확인하도록 한다.
[편집]
True
[편집]
Check
condition이 True일때 성공이다.
[편집]
CheckTrue
Check와 동일하다. 간단하게 줄여서 쓰라고 있는 것 같다.
[편집]
CheckEquals
두 인자가 동일한지 찾는다.
extended, integer, string, WideString, Boolean, TClass 형
[편집]
CheckEqualsString
CheckEquals 함수 이용.
[편집]
CheckEqualsWideString
CheckEquals 함수 이용.
[편집]
CheckEqualsMem
메모리를 비교한다.
[편집]
CheckEqualsBin
Binary 비교
[편집]
CheckEqualsHex
Hex 비교
[편집]
False
[편집]
CheckFalse
[편집]
CheckNotEquals
[편집]
CheckNotEqualsString
[편집]
CheckNotEqualsWideString
[편집]
CheckNotEqualsMem
[편집]
CheckNotEqualsBin
[편집]
CheckNotEqualsHex
[편집]
기타
[편집]
CheckNotNull
Null이 아닐경우 성공이다.
IUnknown, TObject 형
[편집]
CheckNull
CheckNotNull함수의 반대함수
[편집]
CheckSame
같은 포인터 주소이면 성공
IUnknown, TObject 형
[편집]
CheckException
발생한 익셉션의 클래스가 같으면 성공
[편집]
CheckInherits
actual클래스가 expected에서 상속받은 클래스이면 성공
[편집]
CheckIs
클래스의 타입이 AClass라면 성공
[편집]
TestProject 생성
- File -> New -> Other..을 선택하여 New items 창을 연다.
- Item Categories에서 Unit Test를 선택한 후 Test Project를 선택한다.
- Step.1에서 프로젝트 이름과 경로를 지정한다.
- Step.2에서 GUI로 테스트할것인지 Console로 테스트할지 선택한다.
- 테스트를 위한 프로젝트가 생성되었으므로 실행해서 DUnit: Xtreme testing framework이 실행되는지 확인한다.
[편집]
TestCase 생성
- IDE 작업
- File -> New -> Other.. 에서 Item Categories에서 Unit Test를 선택하고 Test Case를 선택한다.
- Step.1에서 테스트할 Unit를 파일을 선택한다.
- 파일을 선택하면 테스트가 가능한 클래스와 메소드가 리스트에 출력된다. 테스트할 메소드를 선택한다.
- Step.2에서 파일명을 지정한다. 기본으로 테스트할 Unit명 앞에 Test가 붙는다.
- Coding
- 테스트할 유닛에 있는 함수가 아래와 같다고 한다.
function TBizLogic.MakeDate(const ADate: string): string;
begin
// YYYYMMDD 를
// YYYY-MM-DD 형태로 변경
Result := '';
if Length(ADate) = 8 then
begin
Result := Copy( ADate, 1, 4 ) + '-' + Copy( ADate, 5, 2 ) + '-' + Copy( ADate, 7, 2 );
end;
end;
- 생성된 Test Case 유닛을 보면 아래와 같은 함수가 자동으로 만들어진다.
procedure TestTBizLogic.TestMakeDate; var ReturnValue: string; ADate: string; begin // TODO: Setup method call parameters ReturnValue := FBizLogic.MakeSFDate(ADate); // TODO: Validate method results end;
- 상단의 TODO 부분에 파라미터를 추가하고 하단의 TODO에는 Check 함수를 추가한다.
// TODO: Setup method call parameters ADate := '20091204'; ReturnValue := FBizLogic.MakeDate(ADate); // TODO: Validate method results CheckEquals( ReturnValue, '2009-12-04', '결과값 오류' );
- 하단에 실패에 대한 케이스를 추가해본다.
// TODO: Setup method call parameters ADate := '200912aa04'; ReturnValue := FBizLogic.MakeSFDate(ADate); // TODO: Validate method results CheckTrue( ReturnValue = '', '잘못된 입력값일때 비어있는 문자열' );
잘못된 입력값을 넣었으므로 비어있는 문자열이 넘어와야 성공인 경우 테스트이다.
- 기본적으로 TestCase 함수들은 published 여야 한다. 그러므로 테스트하고자 하는 함수만 published에 놓고 테스트하는 편이 바람직하겠다.
[편집]
테스트 수행
프로젝트를 실행하면 DUnit: An Xtreme testing framework가 실행되고 테스트 케이스들이 나열된다.
F9나 Run을 선택하면 테스트를 수행하고 결과를 알려준다.
위에 있는 MakeDate 함수를 수정해서 잘못된 결과값을 리턴해보면 바로 결과를 확인할 수 있다.
[편집]
장단점
[편집]
장점
- 클래스를 작업할 때 하나의 함수안에서 여러가지 작업을 하지 않도록 작업하게 해준다. 그럴 수 밖에 없다.
- 테스트 케이스를 잘 작성해놓으면 테스트에 대한 부담이 적어진다.
- 함수에서 일어날 수 있는 경우의 수를 생각해봐야 하기 때문에 오류가 발생할 만한 부분을 미리 찾게 된다.
[편집]
단점
- 코딩량이 많아진다.
- 미리 방어적인 코딩을 잘하는 고수들의 경우는 필요없고 귀찮은 작업이 될 가능성이 높다.
- 통신, GUI부분 등의 부분에는 적용이 곤란하다.
- 개발 단계에서 테스트를 수행해야 효과가 있다.
[편집]
순서
- Quickly add a test
- Run all tests and see the new one fail
- Make a little change
- Run all tests and see them all succeed
- Refactor to remove duplication
[편집]
