Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Testado de las validaciones de la entidad Doctrine con PHPunit

1 de abril de 2015

Hola:

Estoy intentando validar una entidad, llamada idioma con los siguientes campos:

/**
 * @var string
 *
 * @ORM\Column(name="nombre", type="string", length=255)
 * @Assert\NotBlank(message="language.notblank")
 * @Assert\Length(
 *      min = 2,
 *      max = 10,
 *      minMessage = "language.name.min",
 *      maxMessage = "language.name.max"
 * )
 *
 * @Assert\Regex(
 *     pattern="/\d/",
 *     match=false,
 *     message="language.name.notnumber"
 * )
 */
private $nombre;
 
/**
 * @var string
 * @Gedmo\Slug(fields={"isoCode"})
 * @ORM\Column(name="slug", type="string", length=255)
 */
private $slug;
 
/**
 * @var string
 *
 * @ORM\Column(name="isoCode", type="string", length=255)
 *   * @Assert\NotBlank(message="language.isocode.notblank")
 * @Assert\Length(
 *      min = 2,
 *      max = 5,
 *      minMessage = "language.isocode.min",
 *      maxMessage = "language.isocode.max"
 * )
 *
 * @Assert\Regex(
 *     pattern="/\d/",
 *     match=false,
 *     message="language.isocode.notnumber"
 * )
 */
private $isoCode;
 
/**
 * @return string
 * @Assert\File(maxSize="1M",maxSizeMessage="language.flag.maxSize")
 * @Assert\Image(mimeTypesMessage="language.flag.notimage")
 *
 */
private $archivo;

Un ejemplo de un test sería: intentar guardar el nombre de idioma con un numero. Ejemplo: Españ0l (esto tendría que dar error).

La verdad, soy nuevo con esto de los test y necesitaba que me echasen un mano.

Saludo

EDIT: Cuando intento hacer cualquier test me sale este error:

Fatal error: Class 'doctrine.orm.validator.unique' not found in C:\wamp\www\destiny.dev\vendor\symfony\symfony\src\Symfony\Component\Validator\
ConstraintValidatorFactory. php on line 46

Respuestas

#1

Antes de responder a tu pregunta, me gustaría decirte que seguramente es una pérdida de tiempo hacer tests unitarios de la validación de tus entidades. Está bien hacer tests generales en los que pruebas a insertar una entidad con errores y compruebas que efectivamente se produce un error. Pero pribar una a una las condiciones de validación de la entidad probablemente es innecesario, ya que es seguro que esa parte va a funcionar bien (el componente de validación de Symfony ya tiene miles de tests que comprueban eso por tí).

En cualquier caso, si quieres hacer el test unitario para la validación, y teniendo en cuenta que usas anotaciones, deberías usar un código parecido al siguiente:

use Symfony\Component\Validator\Validation;
 
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
 
$errors = $validator->validate($entity);
$this->assertCount(1, $errors);

@javiereguiluz

2 abril 2015, 8:52
#2

Entiendo. Entonces ¿Que test me recomiendas? Porque es la primera vez que los hago (si, muy mal por mi parte) y quiero hacer una aplicacion sólida.

@TsubasaAkai

2 abril 2015, 12:39
#3

Antes que nada: no soy ningún experto en tests, así que habría que preguntar a gente que sí lo sea. En cualquier caso, esta es mi recomendación: empieza creando tests (unitarios, funcionales, BDD, etc.) para las partes de tu aplicación que te dan dinero y para las partes que sean absolutamente críticas para su funcionamiento.

Después, y aunque no son tests, asegúrate de que tu infraestructura de producción es muy sólida y confiable (no te tiene que dar miedo "deployar" la aplicación siempre que sea necesario). Y no olvides configurar herramientas de monitorización para recibir alertas siempre que algo deje de funcionar o no lo haga como esperas.

Por último, cuando tengas todo lo anterior hecho, ya te puedes dedicar a crear tests para otras partes menos importantes de la aplicación.

@javiereguiluz

2 abril 2015, 13:24
#4

Gracias por tu sabiduría ¿Conoces algun libro bueno para aprender PHPunit? Preferiblemente en español.

Gracias de antebrazo

@TsubasaAkai

2 abril 2015, 21:43
#5

Hola

¿Qué herramientas de monitorización recominedas para aplicacion en PHP (Symfony)?

Gracias.

@dariongg

6 abril 2015, 19:24
#6

@dariongg las tres que más oigo que se usan en este ámbito son Monit que es sencilla, gratuita y de software libre, New Relic usada sobre todo para comprobar el rendimiento de la aplicación y Sentry usada principalmente para recibir alertas sobre los errores de la aplicación.

@javiereguiluz

7 abril 2015, 8:58