DUnit: Comment exécuter des tests?
-
21-09-2019 - |
Question
Comment exécuter TestCase est de l'IDE?
J'ai créé un nouveau projet, avec un seul, simple, sous forme:
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.
Maintenant, je vais ajouter un test pour vérifier que pousser Button1
fait ce qu'il doit:
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.
Étant donné ce que je l'ai fait (code de test dans le projet GUI), comment je ne déclenchent maintenant une série de tests? Si je pousse F9 alors la forme apparaît simplement:
L'idéal serait un bouton ou une option de menu, dans l'IDE dire exécuter des tests Dunit :
ce que je vis dans un monde de rêve? Un pays imaginaire, vivant dans une maison sur la voie de jujube sucettes?
La solution
Je suis d'accord avec Uwe Raabe, mais parfois il peut être utile d'avoir un lien « caché » au sein de votre application pour exécuter l'interface graphique DUnit. J'utilise:
TGUITestRunner.runRegisteredTests;
Appelons cela de votre bouton à l'interface graphique DUnit ouvrira ses portes pour vous d'exécuter manuellement et sortie de test de la vue.
Par exemple, si vous maintenez une combinaison de touches spéciale lors de l'ouverture du logiciel propre « Panneau de configuration » , vous obtenez des entrées avancées:
Autres conseils
Ajout d'un TestCase au projet principal n'est pas la voie à suivre. Vous devez créer un TestProject séparé (vous pouvez avoir dans le même ProjectGroup que le projet principal), ajouter un TestCase et exécuter.
J'aime l'idée d'avoir une commande 'Run DUnit tests'
dans l'IDE.
Il pourrait être mis en œuvre par la vérification d'un projet DUnit dans le même dossier, ayant le même nom que le projet en cours:
- Project1.dpr -> le logiciel sous test
- Project1.Tests.dpr => l'application de test DUnit
Dans ce cas, l'IDE devrait permettre à la commande Exécuter les tests DUnit.
-
Après l'exécution des tests, une liste de tous les tests défectueux doit être affiché qui permet de passer à la ligne de source où un test a échoué .
-
Si les tests ont causé des fuites de mémoire, une liste de toutes les fuites doit être affiché qui permet de passer à la ligne de source où la fuite de mémoire a été créé
(DUnit peut être configuré pour détecter des fuites de mémoire et de ne pas les tests où l'on a trouvé)