wiki:DesarrolladoresUnitTest

Unit Test En CakePHP

Center

La Wikipedia  señala:

In computer programming, unit testing is a method of testing that verifies the individual units of source code are working properly. A unit is the smallest testable part of an application. In object-oriented programming, the smallest unit is a method.

Una de las cosas más importantes en el desarrollo de software es la fase de pruebas o "tests", parece increíble pero practicamente todas las empresas en las que trabaje como desarrollador nunca se estableció un calendario de pruebas. De los desarrolladores pasaba al usuario final que era el que realmente encontraba las fallas, por su propia naturaleza las fallas del software son muchas (preguntele a Microsoft o a Google). El resultado era que la empresa se molestaba con nosotros los desarrolladores por entregar un producto con tantas fallas, eso nos mortificaba y nos hacía sentir mal, aún cuando no era nuestra culpa. Lo peor era que a veces se organizaba una gran junta para presentar la aplicación sin probar y allí todo tronaba.

Pero eso sucedió hace años, estaba yo muy pollo ;-), hoy simplemente yo zafo de proyectos mal dirigidos. Resumiendo: el cliente final nunca debe ser el tester.

Existen dos maneras de probar un producto:

1) Haciendo que personas con el mismo nivel técnico que el usuario final utilizen la aplicación con todas sus opciones (WebTesting?).

2) Correr una metaclase que prueba los métodos en los modelos y controladores (UniTest?).

Ambos métodos deben usarse. La ventaja del UniTest? sobre el WebTest? es que es más rápido y permite probar partes definidas de la aplicación para verificar que funcionan correctamente, generalmente cada framework posee su UnitTest?, Struts, RoR y Django tienen sus propias clases para implementarlo.

CakePHP integra  SimpleTest que debe descargarse y colocarse en vendors/simpletest. La base de datos $test debe estar definida en database.php para no usar la base de datos de la aplicación.

Fixtures

Un fixture se ejecuta en cinco pasos:

  1. Creates tables for each of the fixtures needed
  2. Populates tables with data, if data is provided in fixture
  3. Runs test methods
  4. Empties the fixture tables
  5. Removes fixture tables from database

Por lo tanto un fixture es una clase en la cual hay dos atributos, el primero que guarda la estructura de la tabla en un array llmada $fields y un array llamada $records con algunos registros para insertarlos en ella como lo hará un usuario através del navegador.