Pruebas automatizadas con dunit

Pruebas automatizadas con dunit


errar es humano - pruebas Automatizadas de código de Delphi con DUnit. Por Kris Golko



Para introducir errores es de humanos el problema es que generalmente no con la fijación de ellos, pero con la búsqueda de ellos, antes de que sus clientes lo hagan. Herramientas de pruebas automatizadas para el rescate, aquí, con su capacidad para repetir el proceso de prueba sin descanso, para que los desarrolladores puedan trabajar con mucha más confianza. ¿Por qué elegir DUnit? Porque se trata de pruebas de unidad (unidad en el sentido de la construcción de un bloque de código en lugar de un Objeto Pascal unit). Otra ventaja es que DUnit pruebas son marcos dentro de los cuales ejecutar el código, que es más rápido y más conveniente que la ejecución de una aplicación en su totalidad. Lo que más me gusta de DUnit es que puedo crear mi de los casos de prueba con mi favorito de la herramienta de desarrollo. DUnit apoya Delphi 4 a 7, así como la Kylix.



introducción

DUnit se distribuye como código fuente se compone de una serie de Delphi archivos de código fuente, ejemplos y documentación. Se puede descargar desde la página web del proyecto en SourceForge sourceforge.net:/proyectos/dunit. Para instalar, simplemente descomprimir el archivo en un directorio de su elección, la preservación de los subdirectorios. Las unidades que se utilizan para crear y ejecutar pruebas están en 'src' subdirectorio que debe ser añadido a la Ruta de Biblioteca en 'Opciones de Entorno|Library' o la Ruta de Búsqueda de Proyecto|Opciones en el proyecto de prueba.



Cómo escribir casos de prueba

Esta es fácil: todo lo que tienes que hacer es crear una clase heredada de TTestCase, TTestCase se declara en la TestFramework unidad. Para añadir pruebas para un caso de prueba de la clase, simplemente agregue una publicados procedimiento para cada prueba para la clase derivada. Una prueba corredor que utiliza el objeto RTTI para detectar qué pruebas están disponibles en un caso de prueba de la clase.



Existen dos métodos útiles: Instalación y Desmontaje. La ejecución de cada caso de prueba dentro de una clase comienza con la Instalación, luego viene la publicada en el procedimiento que constituye la prueba, el cual es seguido por la Destrucción. El programa de instalación puede ser utilizado para crear instancias de objetos necesarios para ejecutar las pruebas y activa de sus miembros de acuerdo a la prueba de las operaciones. La instalación también debe contener las acciones necesarias que se deben realizar antes de cada prueba se ejecuta, como la conexión a una base de datos. Desmontaje método debe ser usado para limpiar y deshacerse de los objetos.



publicado procedimiento normalmente contiene varias llamadas al método de Verificación. El método de Verificación se declara de la siguiente manera:






El parámetro de condición es por lo general en la forma de expresión que se evalúa como un valor Booleano. Si la expresión pasa en el procedimiento de Verificación se evalúa a falso, a continuación, la prueba se marca como error y la ejecución de la prueba se anula.




procedimiento de Verificación(Condición: boolean msg: string = ') virtual





Pruebas se organizan en conjuntos llamados suites. Suites de prueba puede contener varias pruebas y otras suites de prueba, proporcionando así una manera de construir un árbol de pruebas. Central de DUnit de operaciones es el registro de prueba, que mantiene todas las suites en la aplicación de la prueba. Normalmente, el registro de prueba se construye mientras que una aplicación de prueba inicia. Las unidades que declarar los casos de prueba por convención, tienen una sección de inicialización donde los casos de prueba se crea y se añade a la de registro.



suites de Prueba pueden ser creados mediante la creación de instancias de la TTestSuite clase declarada en el TestFramework. La forma más conveniente y a menudo se utiliza para crear una suite de prueba es el método de uso de la Suite de TTestCase clase, que crea un nuevo TTestSuite que contiene sólo el TestCase: tenga en cuenta que es un método de clase.



La RegisterTest y RegisterTests procedimientos agregar pruebas o suites de prueba para la prueba de registro. El ejemplo más sencillo es crear un conjunto de pruebas que contiene un solo caso de prueba y, a continuación, registrar de la siguiente manera:




...

Verificación(Espera = Real, 'número Real diferente de lo esperado')

...





Cómo ejecutar pruebas

DUnit incluye dos pruebas estándar corredor de clases: TGUITestRunner interactiva con interfaz gráfica de usuario y TTextTestRunner con el modo por lotes interfaz de línea de comandos. TGUITestRunner se declara en la GUITestRunner unidad junto con la RunRegisteredTests independiente de procedimiento, que corre a lo registrado suites de prueba utilizando TGUITestRunner. La CLX versión de TGUITextRunner se declara en la QGUITestRunner de la unidad.



01.gif



TTextTestRunner se declara la TextTestRunner unidad junto con la correspondiente RunRegisteredTests independiente de procedimiento. Las llamadas a RunRegisteredTest son generalmente calificados con un nombre de unidad, ya que hay múltiples global RunRegisteredTests procedimientos, por ejemplo:




Marco.RegisterTest(TMyTest.Suite)





los usuarios Existentes de DUnit darás cuenta de que uno de los cambios más recientes a DUnit es la adición de RunRegisteredTests métodos de la clase y la obsolescencia de independiente RunRegisteredTests, desde varios procedimientos globales con el mismo nombre innecesariamente el desorden en el espacio de nombre. La llamada a RunRegisteredTests ahora se recomienda para ser calificado con el examen de corredor nombre de la clase en lugar de un nombre de la unidad:




GUITestRunner.RunRegisteredTest





ejemplo

Vamos a poner todo esto en práctica. El ejemplo de aplicación recopila las calificaciones en la forma en que muchos de los sitios web que proporcionan una manera de 'tasa de este sitio'. Más en particular, CodeCentral tiene un interesante sistema de clasificación donde puede configurar las opciones de acuerdo a sus preferencias personales (mi favorita es la Antigua Mitología griega). La lógica básica de nuestro sistema de evaluación es definida por la IRateCollector interfaz.




TGUITestRunner.RunRegisteredTest





La TRateTests clase nos permite desarrollar y probar la lógica de negocio de forma independiente desde el desarrollo de la interfaz de usuario. Es realmente ventajoso para desarrollar y probar la lógica de negocio antes de iniciar la interfaz de usuario. Los casos de prueba son diseñados para poner a prueba la aplicación de IRatingCollector.




IRatingCollector = interfaz

& nbsp & nbsp función GetPrompt: string

& nbsp & nbsp procedimiento de Tasa(Rater: cadena de Elección: integer)

& nbsp & nbsp función GetChoiceCount: integer

& nbsp & nbsp función GetChoice(Opción: integer): string

& nbsp & nbsp función GetChoiceRatings(Opción: integer): integer

& nbsp & nbsp función GetRatingCount: integer

& nbsp & nbsp función GetRating(Índice: entero var Evaluador: string): integer

& nbsp & nbsp función GetRatersRating(Rater: string): integer

fin





El programa de Instalación y Desmontaje de los procedimientos se utilizan para crear y disponer de una aplicación de la IRatingCollector.




TRateTests = clase(TTestCase)

privada

& nbsp & nbsp FRateCollector: IRatingCollector

protegido

& nbsp & nbsp procedimiento de Instalación de reemplazar

& nbsp & nbsp procedimiento de Desmontaje reemplazar

publicado

& nbsp & nbsp // pruebas aquí

fin





los Procedimientos declarados en la que se publica la sección son las pruebas básicas de las unidades de la escritura requiere de la inventiva y la creatividad. En nuestro ejemplo, TestChoices comprueba si la lista de opciones es la esperada.




const

& nbsp & nbsp SAMPLE_RATE_PROMPT = 'Tasa de DUnit (Mitológico Eslava Femenino),'

& nbsp & nbsp SAMPLE_RATE_CHOICES: array[0..3] of string = ('Lada', 'Jurata', 'Marzanna', 'Baba Yaga')



procedimiento TRateTests.El programa de instalación

begin

& nbsp & nbsp; / / modificar esta línea sólo para probar otra aplicación de IRatingCollector

& nbsp & nbsp FRateCollector := TSimpleRatingCollector.Crear(SAMPLE_RATE_PROMPT, SAMPLE_RATE_CHOICES)

fin



procedimiento TRateTests.Desmontaje

begin

& nbsp & nbsp FRateCollector := nil

fin





La TestRate procedimiento comprueba si la ejecución del procedimiento de Tasa de interés de los resultados en el aumento del número de las tasas para la tensión nominal de la elección:




procedimiento TRateTests.TestChoices

var

& nbsp & nbsp I: integer

begin

& nbsp & nbsp Verificación(FRatingCollector.GetChoiceCount = Longitud(SAMPLE_RATE_CHOICES),

& nbsp & nbsp & nbsp & nbsp & nbsp Format('debe ser exactamente %d elecciones',

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Longitud(SAMPLE_RATE_CHOICES)]))

& nbsp & nbsp for I := 0 a FRatingCollector.GetChoiceCount - 1 hacer

& nbsp & nbsp & nbsp & nbsp Verificación(FRatingCollector.GetChoice(I) = SAMPLE_RATE_CHOICES[I],

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'Espera' SAMPLE_RATE_CHOICES[I])

fin





Pruebas deben ser lo más completa posible, pero es muy difícil cubrir todos los escenarios posibles. Mientras que los errores son reportados, la prueba debe ser revisado.



Es muy importante que las pruebas de cobertura para condiciones extremas en nuestro ejemplo, la elección o el evaluador pasa al procedimiento de Tasa de interés podría ser válido. Las pruebas de verificación si se produce una excepción cuando una excepción es el esperado. El siguiente código comprueba si EinvalidRater excepción se produce cuando un evaluador trata de la tasa por segunda vez.




Procedimiento TestRate

...

& nbsp & nbsp FRatingCollector.Tasa(NextRater, 0)

& nbsp & nbsp Verificación(FRatingCollector.GetRatingCount = RatingCount 1,

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'Espera' IntToStr(RatingCount 1))

...

fin





por último, el registro de la prueba en la sección de inicialización:




ErrorAsExpected := false

Evaluador := NextRater

prueba

& nbsp & nbsp FRatingCollector.Tasa(Evaluador, 0)

& nbsp & nbsp FRatingCollector.Tasa(Evaluador, 0)

excepto

& nbsp & nbsp // excepción espera

& nbsp & nbsp sobre E:EInvalidRater hacer

& nbsp & nbsp & nbsp & nbsp ErrorAsExpected := true

fin

Verificación(ErrorAsExpected, 'Excepción espera que si un evaluador ya ha evaluado')





El archivo de proyecto muestra la forma típica para ejecutar las pruebas en modo GUI.




RegisterTest('pruebas Básicas', [TRateTests.Suite])





02.gif



Para utilizar CLX lugar de la CLASIFICACIÓN de viena, reemplazar GUITestRunner con QGUITestRunner calificadas, las llamadas a runRegisteredTests así como en la cláusula uses.



Extremo de la cruz-plataforma de programación

Cuando se traslada DUnit a Kylix, hay dos categorías de problemas, la diferencia entre Windows y Linux llamadas al sistema y las diferencias entre VCL y CLX. Sorprendentemente, cubriendo OS diferencias es más fácil. El primer paso es poner instrucciones condicionales en los usos de las cláusulas, como unidades de Windows o Mensajes no están disponibles en Kylix prototipos de sistema básico de llamadas puede ser encontrado en la libc de la unidad básica y el tipo de definiciones en los Tipos y Qt unidades estándar. Algunas funciones del sistema han sido sustituidos por equivalentes de Linux, otros tienen que ser implementadas.



Se tomó una serie de trucos para puerto CLX. CLX y VCL componentes visuales son sólo ligeramente diferentes, pero a pesar de esto, a veces la portabilidad puede ser bastante difícil.



DUnit para Delphi y Kylix compila a partir de la misma fuente con la excepción de GUITestRunner/QGUITestRunner GUI corredores de la prueba, sin embargo, hay un montón de instrucciones condicionales en la fuente para habilitar esta cruz de la plataforma de apoyo.



Esto es sólo el principio

una Vez que los fundamentos han sido dominado, hay muchas características adicionales dentro de DUnit que permiten a los más complejos pruebas a realizar. Por ejemplo, hay ready-made de clases que puede ser utilizado para un propósito específico, tal como la prueba de una pérdida de memoria. El TestExtension unidad contiene una serie de útiles clases basadas en el patrón de diseño Decorador. Uno de los más importantes es TRepeatedTest clase, que permite ejecutar un caso de prueba de un determinado número de veces. En este ejemplo, TRepeatedTest se utiliza para llamar a la Tasa procedimiento varias veces en sucesión.




GUITestRunner.runRegisteredTests





La clase TGUITestCase, admite la prueba de la interfaz gráfica de usuario. TGUITestCase se declara en la GUITesting unidad. Ver RateGUITests unidad para un ejemplo de uso para probar el cuadro de diálogo para presentar la clasificación.



Como el Delphi fuente de DUnit está libremente disponible, por lo que un experimentado desarrollador de Delphi puede extender fácilmente DUnit, por ejemplo mediante la creación de nuevas extensiones.



Pruebas como un liberado de arte

Pruebas trae mejores resultados si las pruebas están basadas en el conocimiento del diseño de la aplicación. Si los diagramas UML se han creado, que puede ser utilizado como base para la construcción de pruebas, completando así el requerimiento, análisis, implementación, ciclo de pruebas.



Idealmente, las pruebas deben desarrollarse al mismo tiempo que el desarrollo del proyecto de código. Técnicamente, las pruebas pueden ser creados por las aplicaciones que ya está completa, sin embargo, estas aplicaciones son a menudo no es adecuado para la unidad de prueba ya que no tienen una estructura modular. El uso de pruebas automatizadas con DUnit promueve un mejor diseño de la aplicación, así como facilitar a refactorizar el código, pero creo que la mayor diferencia que hace es que en la etapa de mantenimiento de la aplicación. Los mantenedores pueden ser asignados a las unidades (en el sentido de módulos), en lugar de completar los proyectos y pueden corrección de errores y unidades de prueba sin la construcción y pruebas de una aplicación entera. A veces un problema puede ser resuelto en el nivel de la unidad y la participación de un desarrollador con experiencia es necesaria, pero en el caso de una gran amorphic de la aplicación, los desarrolladores experimentados tienen que participar todo el tiempo.


& nbsp







Pruebas automatizadas con dunit


Pruebas automatizadas con dunit : Multi-millones de consejos para hacer su vida mas facil.


errar es humano - pruebas Automatizadas de codigo de Delphi con DUnit. Por Kris Golko



Para introducir errores es de humanos el problema es que generalmente no con la fijacion de ellos, pero con la busqueda de ellos, antes de que sus clientes lo hagan. Herramientas de pruebas automatizadas para el rescate, aqui, con su capacidad para repetir el proceso de prueba sin descanso, para que los desarrolladores puedan trabajar con mucha mas confianza. ¿Por que elegir DUnit? Porque se trata de pruebas de unidad (unidad en el sentido de la construccion de un bloque de codigo en lugar de un Objeto Pascal unit). Otra ventaja es que DUnit pruebas son marcos dentro de los cuales ejecutar el codigo, que es mas rapido y mas conveniente que la ejecucion de una aplicacion en su totalidad. Lo que mas me gusta de DUnit es que puedo crear mi de los casos de prueba con mi favorito de la herramienta de desarrollo. DUnit apoya Delphi 4 a 7, asi como la Kylix.



introduccion

DUnit se distribuye como codigo fuente se compone de una serie de Delphi archivos de codigo fuente, ejemplos y documentacion. Se puede descargar desde la pagina web del proyecto en SourceForge sourceforge.net:/proyectos/dunit. Para instalar, simplemente descomprimir el archivo en un directorio de su eleccion, la preservacion de los subdirectorios. Las unidades que se utilizan para crear y ejecutar pruebas estan en 'src' subdirectorio que debe ser añadido a la Ruta de Biblioteca en 'Opciones de Entorno|Library' o la Ruta de Busqueda de Proyecto|Opciones en el proyecto de prueba.



Como escribir casos de prueba

Esta es facil: todo lo que tienes que hacer es crear una clase heredada de TTestCase, TTestCase se declara en la TestFramework unidad. Para añadir pruebas para un caso de prueba de la clase, simplemente agregue una publicados procedimiento para cada prueba para la clase derivada. Una prueba corredor que utiliza el objeto RTTI para detectar que pruebas estan disponibles en un caso de prueba de la clase.



Existen dos metodos utiles: Instalacion y Desmontaje. La ejecucion de cada caso de prueba dentro de una clase comienza con la Instalacion, luego viene la publicada en el procedimiento que constituye la prueba, el cual es seguido por la Destruccion. El programa de instalacion puede ser utilizado para crear instancias de objetos necesarios para ejecutar las pruebas y activa de sus miembros de acuerdo a la prueba de las operaciones. La instalacion tambien debe contener las acciones necesarias que se deben realizar antes de cada prueba se ejecuta, como la conexion a una base de datos. Desmontaje metodo debe ser usado para limpiar y deshacerse de los objetos.



publicado procedimiento normalmente contiene varias llamadas al metodo de Verificacion. El metodo de Verificacion se declara de la siguiente manera:




RegisterTest('Repite Tasa',

& nbsp & nbsp TRepeatedTest.Crear(TRateTests.Create('CheckRate'), 5))





El parametro de condicion es por lo general en la forma de expresion que se evalua como un valor Booleano. Si la expresion pasa en el procedimiento de Verificacion se evalua a falso, a continuacion, la prueba se marca como error y la ejecucion de la prueba se anula.




procedimiento de Verificacion(Condicion: boolean msg: string = ') virtual





Pruebas se organizan en conjuntos llamados suites. Suites de prueba puede contener varias pruebas y otras suites de prueba, proporcionando asi una manera de construir un arbol de pruebas. Central de DUnit de operaciones es el registro de prueba, que mantiene todas las suites en la aplicacion de la prueba. Normalmente, el registro de prueba se construye mientras que una aplicacion de prueba inicia. Las unidades que declarar los casos de prueba por convencion, tienen una seccion de inicializacion donde los casos de prueba se crea y se añade a la de registro.



suites de Prueba pueden ser creados mediante la creacion de instancias de la TTestSuite clase declarada en el TestFramework. La forma mas conveniente y a menudo se utiliza para crear una suite de prueba es el metodo de uso de la Suite de TTestCase clase, que crea un nuevo TTestSuite que contiene solo el TestCase: tenga en cuenta que es un metodo de clase.



La RegisterTest y RegisterTests procedimientos agregar pruebas o suites de prueba para la prueba de registro. El ejemplo mas sencillo es crear un conjunto de pruebas que contiene un solo caso de prueba y, a continuacion, registrar de la siguiente manera:




...

Verificacion(Espera = Real, 'numero Real diferente de lo esperado')

...





Como ejecutar pruebas

DUnit incluye dos pruebas estandar corredor de clases: TGUITestRunner interactiva con interfaz grafica de usuario y TTextTestRunner con el modo por lotes interfaz de linea de comandos. TGUITestRunner se declara en la GUITestRunner unidad junto con la RunRegisteredTests independiente de procedimiento, que corre a lo registrado suites de prueba utilizando TGUITestRunner. La CLX version de TGUITextRunner se declara en la QGUITestRunner de la unidad.



01.gif



TTextTestRunner se declara la TextTestRunner unidad junto con la correspondiente RunRegisteredTests independiente de procedimiento. Las llamadas a RunRegisteredTest son generalmente calificados con un nombre de unidad, ya que hay multiples global RunRegisteredTests procedimientos, por ejemplo:




Marco.RegisterTest(TMyTest.Suite)





los usuarios Existentes de DUnit daras cuenta de que uno de los cambios mas recientes a DUnit es la adicion de RunRegisteredTests metodos de la clase y la obsolescencia de independiente RunRegisteredTests, desde varios procedimientos globales con el mismo nombre innecesariamente el desorden en el espacio de nombre. La llamada a RunRegisteredTests ahora se recomienda para ser calificado con el examen de corredor nombre de la clase en lugar de un nombre de la unidad:




GUITestRunner.RunRegisteredTest





ejemplo

Vamos a poner todo esto en practica. El ejemplo de aplicacion recopila las calificaciones en la forma en que muchos de los sitios web que proporcionan una manera de 'tasa de este sitio'. Mas en particular, CodeCentral tiene un interesante sistema de clasificacion donde puede configurar las opciones de acuerdo a sus preferencias personales (mi favorita es la Antigua Mitologia griega). La logica basica de nuestro sistema de evaluacion es definida por la IRateCollector interfaz.




TGUITestRunner.RunRegisteredTest





La TRateTests clase nos permite desarrollar y probar la logica de negocio de forma independiente desde el desarrollo de la interfaz de usuario. Es realmente ventajoso para desarrollar y probar la logica de negocio antes de iniciar la interfaz de usuario. Los casos de prueba son diseñados para poner a prueba la aplicacion de IRatingCollector.




IRatingCollector = interfaz

& nbsp & nbsp funcion GetPrompt: string

& nbsp & nbsp procedimiento de Tasa(Rater: cadena de Eleccion: integer)

& nbsp & nbsp funcion GetChoiceCount: integer

& nbsp & nbsp funcion GetChoice(Opcion: integer): string

& nbsp & nbsp funcion GetChoiceRatings(Opcion: integer): integer

& nbsp & nbsp funcion GetRatingCount: integer

& nbsp & nbsp funcion GetRating(Indice: entero var Evaluador: string): integer

& nbsp & nbsp funcion GetRatersRating(Rater: string): integer

fin





El programa de Instalacion y Desmontaje de los procedimientos se utilizan para crear y disponer de una aplicacion de la IRatingCollector.




TRateTests = clase(TTestCase)

privada

& nbsp & nbsp FRateCollector: IRatingCollector

protegido

& nbsp & nbsp procedimiento de Instalacion de reemplazar

& nbsp & nbsp procedimiento de Desmontaje reemplazar

publicado

& nbsp & nbsp // pruebas aqui

fin





los Procedimientos declarados en la que se publica la seccion son las pruebas basicas de las unidades de la escritura requiere de la inventiva y la creatividad. En nuestro ejemplo, TestChoices comprueba si la lista de opciones es la esperada.




const

& nbsp & nbsp SAMPLE_RATE_PROMPT = 'Tasa de DUnit (Mitologico Eslava Femenino),'

& nbsp & nbsp SAMPLE_RATE_CHOICES: array[0..3] of string = ('Lada', 'Jurata', 'Marzanna', 'Baba Yaga')



procedimiento TRateTests.El programa de instalacion

begin

& nbsp & nbsp; / / modificar esta linea solo para probar otra aplicacion de IRatingCollector

& nbsp & nbsp FRateCollector := TSimpleRatingCollector.Crear(SAMPLE_RATE_PROMPT, SAMPLE_RATE_CHOICES)

fin



procedimiento TRateTests.Desmontaje

begin

& nbsp & nbsp FRateCollector := nil

fin





La TestRate procedimiento comprueba si la ejecucion del procedimiento de Tasa de interes de los resultados en el aumento del numero de las tasas para la tension nominal de la eleccion:




procedimiento TRateTests.TestChoices

var

& nbsp & nbsp I: integer

begin

& nbsp & nbsp Verificacion(FRatingCollector.GetChoiceCount = Longitud(SAMPLE_RATE_CHOICES),

& nbsp & nbsp & nbsp & nbsp & nbsp Format('debe ser exactamente %d elecciones',

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Longitud(SAMPLE_RATE_CHOICES)]))

& nbsp & nbsp for I := 0 a FRatingCollector.GetChoiceCount - 1 hacer

& nbsp & nbsp & nbsp & nbsp Verificacion(FRatingCollector.GetChoice(I) = SAMPLE_RATE_CHOICES[I],

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'Espera' SAMPLE_RATE_CHOICES[I])

fin





Pruebas deben ser lo mas completa posible, pero es muy dificil cubrir todos los escenarios posibles. Mientras que los errores son reportados, la prueba debe ser revisado.



Es muy importante que las pruebas de cobertura para condiciones extremas en nuestro ejemplo, la eleccion o el evaluador pasa al procedimiento de Tasa de interes podria ser valido. Las pruebas de verificacion si se produce una excepcion cuando una excepcion es el esperado. El siguiente codigo comprueba si EinvalidRater excepcion se produce cuando un evaluador trata de la tasa por segunda vez.




Procedimiento TestRate

...

& nbsp & nbsp FRatingCollector.Tasa(NextRater, 0)

& nbsp & nbsp Verificacion(FRatingCollector.GetRatingCount = RatingCount 1,

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'Espera' IntToStr(RatingCount 1))

...

fin





por ultimo, el registro de la prueba en la seccion de inicializacion:




ErrorAsExpected := false

Evaluador := NextRater

prueba

& nbsp & nbsp FRatingCollector.Tasa(Evaluador, 0)

& nbsp & nbsp FRatingCollector.Tasa(Evaluador, 0)

excepto

& nbsp & nbsp // excepcion espera

& nbsp & nbsp sobre E:EInvalidRater hacer

& nbsp & nbsp & nbsp & nbsp ErrorAsExpected := true

fin

Verificacion(ErrorAsExpected, 'Excepcion espera que si un evaluador ya ha evaluado')





El archivo de proyecto muestra la forma tipica para ejecutar las pruebas en modo GUI.




RegisterTest('pruebas Basicas', [TRateTests.Suite])





02.gif



Para utilizar CLX lugar de la CLASIFICACION de viena, reemplazar GUITestRunner con QGUITestRunner calificadas, las llamadas a runRegisteredTests asi como en la clausula uses.



Extremo de la cruz-plataforma de programacion

Cuando se traslada DUnit a Kylix, hay dos categorias de problemas, la diferencia entre Windows y Linux llamadas al sistema y las diferencias entre VCL y CLX. Sorprendentemente, cubriendo OS diferencias es mas facil. El primer paso es poner instrucciones condicionales en los usos de las clausulas, como unidades de Windows o Mensajes no estan disponibles en Kylix prototipos de sistema basico de llamadas puede ser encontrado en la libc de la unidad basica y el tipo de definiciones en los Tipos y Qt unidades estandar. Algunas funciones del sistema han sido sustituidos por equivalentes de Linux, otros tienen que ser implementadas.



Se tomo una serie de trucos para puerto CLX. CLX y VCL componentes visuales son solo ligeramente diferentes, pero a pesar de esto, a veces la portabilidad puede ser bastante dificil.



DUnit para Delphi y Kylix compila a partir de la misma fuente con la excepcion de GUITestRunner/QGUITestRunner GUI corredores de la prueba, sin embargo, hay un monton de instrucciones condicionales en la fuente para habilitar esta cruz de la plataforma de apoyo.



Esto es solo el principio

una Vez que los fundamentos han sido dominado, hay muchas caracteristicas adicionales dentro de DUnit que permiten a los mas complejos pruebas a realizar. Por ejemplo, hay ready-made de clases que puede ser utilizado para un proposito especifico, tal como la prueba de una perdida de memoria. El TestExtension unidad contiene una serie de utiles clases basadas en el patron de diseño Decorador. Uno de los mas importantes es TRepeatedTest clase, que permite ejecutar un caso de prueba de un determinado numero de veces. En este ejemplo, TRepeatedTest se utiliza para llamar a la Tasa procedimiento varias veces en sucesion.




GUITestRunner.runRegisteredTests





La clase TGUITestCase, admite la prueba de la interfaz grafica de usuario. TGUITestCase se declara en la GUITesting unidad. Ver RateGUITests unidad para un ejemplo de uso para probar el cuadro de dialogo para presentar la clasificacion.



Como el Delphi fuente de DUnit esta libremente disponible, por lo que un experimentado desarrollador de Delphi puede extender facilmente DUnit, por ejemplo mediante la creacion de nuevas extensiones.



Pruebas como un liberado de arte

Pruebas trae mejores resultados si las pruebas estan basadas en el conocimiento del diseño de la aplicacion. Si los diagramas UML se han creado, que puede ser utilizado como base para la construccion de pruebas, completando asi el requerimiento, analisis, implementacion, ciclo de pruebas.



Idealmente, las pruebas deben desarrollarse al mismo tiempo que el desarrollo del proyecto de codigo. Tecnicamente, las pruebas pueden ser creados por las aplicaciones que ya esta completa, sin embargo, estas aplicaciones son a menudo no es adecuado para la unidad de prueba ya que no tienen una estructura modular. El uso de pruebas automatizadas con DUnit promueve un mejor diseño de la aplicacion, asi como facilitar a refactorizar el codigo, pero creo que la mayor diferencia que hace es que en la etapa de mantenimiento de la aplicacion. Los mantenedores pueden ser asignados a las unidades (en el sentido de modulos), en lugar de completar los proyectos y pueden correccion de errores y unidades de prueba sin la construccion y pruebas de una aplicacion entera. A veces un problema puede ser resuelto en el nivel de la unidad y la participacion de un desarrollador con experiencia es necesaria, pero en el caso de una gran amorphic de la aplicacion, los desarrolladores experimentados tienen que participar todo el tiempo.


& nbsp

Pruebas automatizadas con dunit

Pruebas automatizadas con dunit : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación

Consejos Y Trucos www.consejosytrucos.net Ciempozuelos, Madrid Extramuros 82 ES-M 28350 Spain 674 192 969


RegisterTest('Repite Tasa',

& nbsp & nbsp TRepeatedTest.Crear(TRateTests.Create('CheckRate'), 5))