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
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
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
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
Gracias por tu sabiduría ¿Conoces algun libro bueno para aprender PHPunit? Preferiblemente en español.
Gracias de antebrazo
@TsubasaAkai
Hola
¿Qué herramientas de monitorización recominedas para aplicacion en PHP (Symfony)?
Gracias.
@dariongg
@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