Delphi에서 TDD이용하기

From YYpBD's MediaWiki

Jump to: navigation, search

목차

개요

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 생성

  1. File -> New -> Other..을 선택하여 New items 창을 연다.
  2. Item Categories에서 Unit Test를 선택한 후 Test Project를 선택한다.
  3. Step.1에서 프로젝트 이름과 경로를 지정한다.
  4. Step.2에서 GUI로 테스트할것인지 Console로 테스트할지 선택한다.
  5. 테스트를 위한 프로젝트가 생성되었으므로 실행해서 DUnit: Xtreme testing framework이 실행되는지 확인한다.

TestCase 생성

  1. IDE 작업
    1. File -> New -> Other.. 에서 Item Categories에서 Unit Test를 선택하고 Test Case를 선택한다.
    2. Step.1에서 테스트할 Unit를 파일을 선택한다.
    3. 파일을 선택하면 테스트가 가능한 클래스와 메소드가 리스트에 출력된다. 테스트할 메소드를 선택한다.
    4. Step.2에서 파일명을 지정한다. 기본으로 테스트할 Unit명 앞에 Test가 붙는다.
  2. 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 함수를 수정해서 잘못된 결과값을 리턴해보면 바로 결과를 확인할 수 있다.

장단점

장점

  1. 클래스를 작업할 때 하나의 함수안에서 여러가지 작업을 하지 않도록 작업하게 해준다. 그럴 수 밖에 없다.
  2. 테스트 케이스를 잘 작성해놓으면 테스트에 대한 부담이 적어진다.
  3. 함수에서 일어날 수 있는 경우의 수를 생각해봐야 하기 때문에 오류가 발생할 만한 부분을 미리 찾게 된다.

단점

  1. 코딩량이 많아진다.
  2. 미리 방어적인 코딩을 잘하는 고수들의 경우는 필요없고 귀찮은 작업이 될 가능성이 높다.
  3. 통신, GUI부분 등의 부분에는 적용이 곤란하다.
  4. 개발 단계에서 테스트를 수행해야 효과가 있다.

순서

  1. Quickly add a test
  2. Run all tests and see the new one fail
  3. Make a little change
  4. Run all tests and see them all succeed
  5. Refactor to remove duplication

Links

맞춤검색