2010-03-22 10 views
10

¿Cómo ejecuto TestCase del IDE?DUnit: ¿Cómo ejecutar pruebas?

he creado un nuevo proyecto, con una única y sencilla, la forma:

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. 

Ahora voy a añadir un caso de prueba para comprobar que empujar Button1 hace lo que debe:

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. 

Teniendo en cuenta lo que he hecho (código de prueba en el proyecto GUI), ¿cómo puedo activar una ejecución de las pruebas? Si empujo F9 entonces la forma simplemente aparece:

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

Lo ideal habría un botón, o una opción de menú, en el IDE diciendo Run DUnit Pruebas de:

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

¿Estoy viviendo en un mundo de ensueño? ¿Una tierra de fantasía, viviendo en una casa de gomitas en el camino de la piruleta?

+0

Como acotación al margen, usted encontrará que la lógica de negocio es más fácil de probar la unidad si se separa hacia fuera en clases, en lugar de tratar a la unidad de probar directamente los controladores de eventos de interfaz de usuario . –

+0

@Monk: La desventaja de eso es que tengo un código repartido entre varias clases, o peor aún, varios archivos. –

Respuesta

6

Estoy de acuerdo con Uwe Raabe, pero a veces puede ser útil tener un enlace "oculto" dentro de su aplicación para ejecutar la GUI de DUnit. Yo uso:

TGUITestRunner.runRegisteredTests; 

Llame a este desde el botón en la interfaz gráfica de usuario DUnit se abrirá para que usted pueda ejecutar de forma manual y la salida de vista de prueba.


Por ejemplo, si se mantiene pulsado una combinación de teclas especial al abrir propia "Panel de control" del software, se obtiene algunas entradas avanzadas:

enter image description here

+0

¿Por qué es esto mejor que tener un grupo de proyecto con MyApp y MyApp_Tests como dos proyectos separados? –

+0

Si tengo un proyecto separado con código de prueba, ¿entonces no tendría un proyecto separado? Realmente no quiero tener que pasar de un proyecto a otro. No quiero tener que cambiar un menú desplegable entre "Proyecto real" y "Proyecto de prueba". Si eso significa que tengo un código de prueba incrustado en mi ejecutable final: entonces que así sea. –

+5

¿Un proyecto de modo conmutable 'real' y 'prueba'? El código huele a futuro: P – mjn

12

Agregar una TestCase al proyecto principal no es el camino a seguir. Debe crear un TestProject por separado (puede tenerlo en el mismo ProjectGroup como proyecto principal), agregar un TestCase y ejecutarlo.

+1

Exactamente. El código del caso de prueba no pertenece a SU APLICACIÓN. Su proyecto de caso de prueba contiene sus pruebas unitarias. Usted crea una nueva aplicación de prueba unitaria, agrega el código de su aplicación a la cláusula uses de su prueba unitaria. –

+2

¿Hay alguna forma de ejecutar el proyecto de prueba sin tener que abandonar el proyecto real? me gustaría tratar pruebas similares a una 'Comprobación de sintaxis',' Proyecto de compilación' o 'Compilar todo'. –

+4

agréguela como otro proyecto al ** mismo grupo de proyectos **. A continuación, puede hacer una acumulación de todo de aquí y así sucesivamente ... –

2

me gusta la idea de teniendo un comando 'Run DUnit tests' en el IDE.

Podría ser implementada mediante la comprobación de un proyecto DUnit en la misma carpeta, que tienen el mismo nombre que el proyecto actual:

  • Project1.dpr -> el software bajo prueba
  • Proyecto1 .Tests.dpr => la aplicación de prueba DUnit

En este caso, el IDE debe habilitar el comando Ejecutar pruebas DUnit.

  • Después de ejecutar las pruebas, una lista de todos fallaron las pruebas se deben mostrar que permite saltar a la línea de origen en una prueba no.

  • Si las pruebas causaron pérdidas de memoria, una lista de todas las fugas se debe mostrar lo que permite saltar a la línea de origen, donde se ha creado la pérdida de memoria

(DUnit se puede configurar para detectar pérdidas de memoria y no superen las pruebas cuando uno ha sido encontrado)

+0

Ahora alguien solo tiene que escribirlo;) –

+0

Quizás uno de mis seguidores :) http://delphi.uservoice.com/forums/4432-general/suggestions/537663-dunit-ide-integration-for-failed-test – mjn

Cuestiones relacionadas