2010-03-22 11 views
10

IDE에서 TestCase을 어떻게 실행합니까? DUnit : 테스트를 실행하는 방법?

은 내가 하나, 간단한, 양식, 새로운 프로젝트를 생성 :

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    StdCtrls; 

type 
    TForm1 = class(TForm) 
    private 
    public 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.DFM} 

end. 

지금 내가 Button1를 밀어 것이 않는다는 것을 확인하기 위해 테스트 케이스를 추가 할 것입니다 무엇을 수행해야합니다

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    StdCtrls; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    public 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.DFM} 

uses 
    TestFramework; 

type 
    TForm1Tests = class(TTestCase) 
    private 
     f: TForm1; 
    protected 
    procedure SetUp; override; 
    procedure TearDown; override; 
    published 
    procedure TestButton1Click; 
    end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    //todo 
end; 

{ TForm1Tests } 

procedure TForm1Tests.SetUp; 
begin 
    inherited; 

    f := TForm1.Create(nil); 
end; 

procedure TForm1Tests.TearDown; 
begin 
    f.Free; 
    inherited; 
end; 

procedure TForm1Tests.TestButton1Click; 
begin 
    f.Button1Click(nil); 
    Self.CheckEqualsString('Hello, world!', f.Caption); 
end; 

end. 

주어진 GUI 프로젝트의 테스트 코드를 보면, 어떻게 테스트를 실행할 수 있습니까? 내가 F9를 누르면 다음 양식은 단순히 나타납니다

alt text http://i39.tinypic.com/zsobhv.jpg

가 이상적으로 실행은 DUnit을 말하는 IDE에서, 버튼 또는 메뉴 옵션이있을 것입니다 것은 시험 :

alt text http://i44.tinypic.com/24wvipw.jpg

나는 꿈의 세계에 살고 있습니까? 롤리팝 차선의 껌 집에 살고있는 환상의 땅?

+0

UI 이벤트 핸들러를 직접 테스트하지 않고 비즈니스 로직을 클래스로 분리하면 비즈니스 로직을 단위 테스트로 쉽게 찾을 수 있습니다 . –

+0

@Monk : 단점은 코드가 여러 클래스에 걸쳐 있거나 여러 파일이 악화되어 있다는 것입니다. –

답변

6

나는 Uwe Raabe와 동의하지만, 때로는 DUnit GUI를 실행하기 위해 앱 내에 '숨겨진'링크가있는 것이 유용 할 수 있습니다. 내가 사용 : 당신의 버튼에서

TGUITestRunner.runRegisteredTests; 

콜이를은 DUnit GUI에서 수동으로 실행하고보기 테스트 출력을 위해 열립니다.


당신이 소프트웨어를 자신의 "제어판"를 열고 특수 키 조합을 누른 경우 예를 들어, 일부 고급 항목 수 :

enter image description here

+0

보다 나은 이유는 무엇입니까? MyApp 및 MyApp_Tests가있는 프로젝트 그룹을 두 개의 개별 프로젝트로 보유하고 있습니까? –

+0

테스트 코드가있는 별도의 프로젝트가 있다면 별도의 프로젝트가 필요하지 않습니까? 나는 정말로 프로젝트를 뒤집어 쓰고 싶지 않습니다. 나는 "실제 프로젝트"와 "프로젝트 테스트"사이의 드롭 다운을 바꾸고 싶지 않습니다. 그게 내 최종 실행 파일에 포함 된 테스트 코드를 의미합니다 : 그렇다면 그렇게. –

+5

전환 가능한 '실제'및 '테스트'모드 프로젝트입니까? 코드 냄새가 앞으로 : P – mjn

12

주 프로젝트에 TestCase를 추가하는 것은 방법이 아닙니다. 별도의 TestProject (주 프로젝트와 동일한 ProjectGroup에 만들 수 있음)를 만들고 TestCase를 추가하고 실행해야합니다.

+1

정확히. 테스트 케이스 코드는 귀하의 애플리케이션에 속하지 않습니다. 테스트 케이스 프로젝트에는 유닛 테스트가 포함되어 있습니다. 새 단위 테스트 응용 프로그램을 만들고 단위 테스트의 uses 절에 응용 프로그램 코드를 추가합니다. –

+2

실제 프로젝트에서 전환하지 않고도 테스트 프로젝트를 실행할 수 있습니까? 나는'Syntax Check','Build Project' 또는'Build All'과 비슷한 테스트를하고 싶습니다. –

+4

** 동일한 프로젝트 그룹 **에 다른 프로젝트로 추가하십시오. 그러면 여기서부터 모든 것을 빌드 할 수 있습니다 ... –

2

내가의 아이디어를 좋아하지을 IDE에 'Run DUnit tests' 명령이 있습니다.

그것은 현재 프로젝트와 같은 이름을 가진, 같은 폴더에은 DUnit 프로젝트를 확인하여 구현 될 수있다 :

  • PROJECT1.DPR - 테스트
  • Project1의 아래> 소프트웨어 .Tests.dpr =>이 경우은 DUnit 테스트 응용 프로그램

는, 실행은 DUnit을 가능하게한다 IDE 명령을 테스트합니다.

  • 이 시험을 수행 한 결과, 모든리스트는 테스트 테스트는 실패 소스 라인으로 이동할 수있게하는 표시되어야 못했다.테스트는 메모리 누수 발생

  • 경우 모든 누출의 목록은 메모리 누출이 만들어 소스 라인으로 이동할 수있게하는 표시되어야

(은 DUnit 검출하도록 구성 될 수있다 메모리 누수 및 실패 테스트)

+0

이제 누군가가 그것을 작성해야합니다;) –

+0

어쩌면 내 지지자 중 하나가 :) http://delphi.uservoice.com/forums/4432-general/suggestions/537663-dunit-ide-integration-for-failed-test – mjn

관련 문제