Estoy empezando con Test::More, ya tengo algunos scripts de prueba .t Ahora me gustaría definir una función que solo se usará para las pruebas, pero a través de diferentes archivos .t. ¿Dónde está el mejor lugar para poner esa función? Defina otro .t sin ninguna prueba y require
donde sea necesario? (Como nota al margen, uso la estructura del módulo creada por Module::Starter)¿Dónde debería poner funciones de utilidad comunes para las pruebas Perl .t?
Respuesta
escribir un módulo como rjh ha demostrado. Puso en t/lib/Prueba/YourThing.pm, entonces se puede cargar como:
use lib 't/lib';
use Test::YourThing;
O se puede poner directamente en t/Prueba/YourThing.pm, lo llaman package t::Test::YourThing
y cargarlo como:
use t::Test::YourThing;
la ventaja es no tener que escribir la línea use lib
en cada archivo de prueba, e identificar claramente como un módulo de prueba local. El lado negativo está abarrotado t /, no funcionará si "." no está en @INC
(por ejemplo, si ejecuta las pruebas en modo de atenuación, pero se puede solucionar con use lib "."
) y si decide mover el archivo .pm fuera de su proyecto, debe volver a escribir todos los usos. Tu elección.
El mejor enfoque es poner sus funciones de prueba, como cualquier otro conjunto de funciones, en un módulo. Luego puede usar Test::Builder para que los mensajes de diagnóstico de prueba/falla actúen como si la falla se originara en el archivo .t, en lugar de su módulo.
Aquí hay un ejemplo simple.
package Test::YourModule;
use Test::Builder;
use Sub::Exporter -setup => { exports => ['exitcode_ok'] }; # or 'use Exporter' etc.
my $Test = Test::Builder->new;
# Runs the command and makes sure its exit code is $expected_code. Contrived!
sub exitcode_ok {
my ($command, $expected_code, $name) = @_;
system($command);
my $exit = $? >> 8;
my $message = $!;
my $ok = $Test->is_num($exit, $expected_code, $name);
if (!$ok) {
$Test->diag("$command exited incorrectly with the error '$message'");
}
return $ok;
}
En la secuencia de comandos:
use Test::More plan => 1;
use Test::YourModule qw(exitcode_ok);
exitcode_ok('date', 0, 'date exits without errors');
Estoy de acuerdo con todo esto, pero generalmente pondría la funcionalidad específica de la prueba en un módulo en el directorio t /, por lo que no se puede confundir con la aplicación real, p. en MyApp/t/Common.pm, con el nombre del paquete MyApp :: t :: Common. – Ether
Recomendaría Test :: Builder :: Module, ya que se encargará de escribir una importación inteligente() para usted, una que pueda manejar un plan de prueba. Esto permite que su módulo sea independiente de Test :: More. – Schwern
Esto es un poco pesado cuando el código común que desea compartir no está probando nada. Las funciones de utilidad y varias otras cosas que no van a emitir TAP no se beneficiarán de un contenedor Test :: Builder. –
- 1. ¿Dónde debería poner mis pruebas JUnit?
- 2. Symfony 2 - ¿Dónde debería poner una clase de utilidad?
- 3. ¿Dónde poner las funciones de conversión?
- 4. ¿Dónde poner archivos comunes de aplicaciones modificables?
- 5. Dónde poner las funciones de "utilidad" del modelo en Ruby on Rails
- 6. Cuando se prueba con rspec, ¿dónde poner "métodos de utilidad de prueba" comunes?
- 7. ¿Dónde deberían vivir las funciones de utilidad en Django?
- 8. ¿Dónde debería poner mi código JavaScript?
- 9. ¿Dónde debería poner las constantes globales en un programa C++?
- 10. ¿Dónde debería poner la clase base vacía?
- 11. ¿Dónde poner las afirmaciones?
- 12. ¿Dónde en una estación de trabajo remota debería poner un archivo CSV-config para las pruebas JMeter distribuidas?
- 13. ¿Dónde debería definir las funciones globales en ExtJS 4 MVC?
- 14. ¿Dónde debería colocar las interfaces para MEF?
- 15. Java: ¿dónde debería poner código de lógica de oyente anónimo?
- 16. ¿Pruebas de unidades de referencia para estructuras de datos comunes?
- 17. Funciones comunes de CRUD en PHP
- 18. ¿Dónde debo poner funciones misceláneas en un proyecto .NET?
- 19. ¿Cómo redefino las funciones integradas de Perl?
- 20. Dónde colocar scripts de utilidad en rieles
- 21. ¿Dónde poner el archivo .htaccess?
- 22. ¿Dónde colocar consultas comunes en Django?
- 23. Las pruebas para la desigualdad en T-SQL
- 24. ¿Dónde poner BOOST_CLASS_EXPORT para impulsar :: serialización?
- 25. Prácticas elegantes en "funciones de utilidad aleatorias"
- 26. API de Windows para funciones comunes del reproductor multimedia
- 27. Pruebas de regresión para procedimientos almacenados de T-SQL
- 28. ¿Dónde debería comenzar con las bases de datos de aprendizaje?
- 29. ¿Dónde colocar un módulo de utilidad compartido en OCaml?
- 30. ¿Dónde poner clases internas?
Está bien, por el momento voy a ir con este, incluso si voy a echar un vistazo a Test :: Builder en un momento. – zedoo