2010-03-22 6 views
10

Как запустить TestCase из IDE?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

В идеале было бы кнопка или пункт меню, в интегрированной среде говоря Run DUnit Тесты:

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

Я живу в мире мечты? Земля фантазии, живущая в доме с камедью на леденецкой дорожке?

+0

. В стороне вы обнаружите, что ваша бизнес-логика проще провести единичный тест, если вы разделите ее на классы, вместо того, чтобы пытаться самостоятельно тестировать обработчики событий пользовательского интерфейса , –

+0

@Monk: Недостатком этого является то, что у меня код распространяется на несколько классов или, что еще хуже, на несколько файлов. –

ответ

6

Я согласен с Uwe Raabe, но иногда бывает полезно иметь «скрытую» ссылку в вашем приложении для запуска графического интерфейса DUnit. Я использую:

TGUITestRunner.runRegisteredTests; 

вызова этого из вашей кнопки на DUnit GUI будет открыт для Вас, чтобы вручную запустить и выход вида теста.


Например, если удерживать нажатой специальную комбинацию клавиш при открытии собственного «Панель управления» Программное обеспечение в, вы получите некоторые дополнительные данные:

enter image description here

+0

Почему это лучше, чем наличие проектной группы с MyApp и MyApp_Tests в виде двух отдельных проектов? –

+0

Если у меня есть отдельный проект с тестовым кодом, у вас не будет отдельный проект? я действительно не хочу перелистывать проекты. я не хочу перебрасывать раскрывающийся список между «Реальный проект» и «Тест-проект». Если это означает, что у меня есть тестовый код, встроенный в мой окончательный исполняемый файл: тогда пусть будет так. –

+5

Переключаемый «реальный» и «тестовый» режим? Код пахнет вперед: P – mjn

12

Добавление TestCase к основному проекту - это не путь. Вы должны создать отдельный TestProject (вы можете иметь его в той же ProjectGroup, что и основной проект), добавить TestCase и запустить.

+1

Точно. Код тестового кода не принадлежит ВАШЕМУ ПРИМЕНЕНИЮ. Проект вашего тестового примера содержит ваши модульные тесты. Вы создаете новое тестовое приложение для модулей, вы добавляете свой код приложения в предложение uses вашего модульного теста. –

+2

Есть ли способ запустить тестовый проект без необходимости переключаться с реального проекта? я бы хотел обработать тесты, похожие на «Проверка синтаксиса», «Построить проект» или «Построить все». –

+4

добавьте его в качестве другого проекта в ту же группу проектов **. Тогда вы можете сделать сборку отсюда и так далее ... –

2

Мне нравится идея с командой 'Run DUnit tests' в среде IDE.

Это может быть реализовано путем проверки проекта DUnit в той же папке, с тем же именем, что и текущий проект:

  • Project1.dpr -> программное обеспечение тестируемой
  • project1 .Tests.dpr => приложение для тестирования DUnit

В этом случае среда IDE должна включать команду Run DUnit tests.

  • После выполнения тестов, список всех неудачных испытаний должны быть отображены, что позволяет перейти к исходной строке, где тест не удалось.

  • Если испытания вызвали утечку памяти, список всех утечек должен отображаться, что позволяет перейти к исходной линии, где была создана утечка памяти

(DUnit может быть выполнена с возможностью обнаружения утечки памяти и проверки отказа при обнаружении одного из них)

+0

Теперь кому-то просто нужно это написать;) –

+0

Возможно, один из моих сторонников :) http://delphi.uservoice.com/forums/4432-general/suggestions/537663-dunit-ide-integration-for-failed-test – mjn