¿cómo cambio la hora actual (es decir, la salida de tiempo()) en php para la prueba de unidad date-manipulation-class?cómo cambiar la hora actual para las funciones de fecha de prueba unitaria en php
Respuesta
Suena como que necesita para eliminar la dependencia de time()
de su clase de manipulación fecha
entonces, ¿debería cambiar la lógica de la clase solo para probar? – happytoad
@happytoad - no solo necesita reemplazar la llamada a 'time()' en su clase de manipulación de fecha por algo que controle. Por ejemplo, puede pasar un valor de tiempo a la función que está probando como parámetro, o puede pasarla al constructor de su clase de fecha. – rojoca
por lo que no hay forma de cambiar el tiempo. es raro que algo tan simple como cambiar la hora actual no esté disponible para las pruebas. gorrón. Gracias. – happytoad
Mi conjetura es que están luchando con sus dependencias. Parece que está utilizando la función de tiempo() dentro de su clase, mientras que con la prueba de unidad desea asegurarse de controlar la salida de los métodos/clases que proporcionan el tiempo para usted. Yo diría crear una clase de tiempo que le proporcione el tiempo y se burle de las pruebas de su unidad.
Recientemente encontré una solución que es genial si está usando espacios de nombres PHP 5.3. Puede implementar una nueva función de tiempo() dentro de su espacio de nombres actual y crear un recurso compartido donde establezca el valor de retorno en sus pruebas. Luego, cualquier llamada no puntual a time() usará su nueva función.
Para más lectura que describen en detalle en mi blog
Recientemente implementé la biblioteca [php-mock] (https://github.com/malkusch/php-mock) que usa esa función de lenguaje para burlarse de funciones PHP no deterministas como 'time()'. –
Usted podría considerar un modelo de herencia basada en la interfaz:
interface iClock
{
public function getTime();
}
class SystemClock implements iClock
{
public function getTime()
{
return time();
}
}
class FakeClock implements iClock
{
private $time;
function __construct($time)
{
$this->time = $time;
}
public function getTime()
{
return $this->time;
}
// you could have more functions to advance the time, etc.
}
sus propias clases que necesitan trabajar con la hora actual tomaría una parámetro constructor del tipo de interfaz iClock
.
class YourOwnClass
{
private $clock;
function __construct(iClock $clock)
{
$this->clock = $clock;
}
function someFunction()
{
$now = $this->clock->getTime();
// whatever
return $now;
}
}
Entonces sólo tendría que inyectar el tipo de reloj que quería, dependiendo de si usted estaba en una prueba de unidad o no:
$realWorldInstance = new YourOwnClass(new SystemClock());
echo $realWorldInstance->someFunction();
$unitTestInstance = new YourOwnClass(new FakeClock(1234));
echo $unitTestInstance->someFunction();
BTW - Yo uso este patrón de frecuencia en .NET también. También está integrado en la interfaz IClock
proporcionada por Noda Time. No veo ninguna razón por la cual este patrón no funcionaría en PHP. Puede optar por devolver un DateTime
en lugar de solo la marca de tiempo entera, pero lo anterior es el mínimo necesario para usar el patrón.
- 1. Cambiar la fecha y hora actual en php
- 2. PHP Fecha Hora Hora actual Agregar minutos
- 3. Mysql/Php - Fecha y hora actual
- 4. ¿Cómo puedo obtener fecha y hora actual en PHP
- 5. Fecha/hora actual de la fecha de la secuencia?
- 6. cómo obtener la fecha/hora actual como un objeto de fecha en PHP
- 7. ¿Cómo obtener la fecha y hora actual?
- 8. Obtener la fecha/hora actual en segundos
- 9. ¿Cómo puedo verificar si la fecha/hora actual es posterior a una fecha/hora establecida?
- 10. Cambiar la fecha y hora en MusicSequence
- 11. Código de prueba de unidad que obtiene la hora actual
- 12. Insertar fecha actual en formato de fecha y hora mySQL
- 13. Cómo obtener la fecha y la hora actual de la columna Fecha/Hora en la lista personalizada de SharePoint
- 14. ¿Cómo cambiar la fecha/hora en Python para todos los módulos?
- 15. Establecer la fecha y hora de iPhone dentro de la aplicación para fines de prueba?
- 16. Mostrar fecha/hora UTC en fecha/hora de acuerdo con la zona horaria actual
- 17. cómo obtener la fecha y hora actual en SQL?
- 18. PHP fecha equivocada/hora
- 19. Dónde colocar los archivos de prueba para la prueba unitaria
- 20. Prueba unitaria básica vs. Prueba unitaria
- 21. Cómo obtener la fecha actual Hora formateada en Flex
- 22. cómo verificar la fecha y hora actual en Jquery
- 23. PHP, Cómo obtener la fecha actual en un formato determinado
- 24. Cambiar el idioma para la fecha en php
- 25. introducción a la prueba unitaria en javascript
- 26. ¿Cómo manejar la fecha y la hora con PHP?
- 27. MKTIME, fecha de PHP/fecha y hora YYYY-MM-DD
- 28. ¿Cómo cambiar la hora en el servidor apache para que coincida con la hora de la computadora (PHP)?
- 29. Prueba unitaria para controladores anidados
- 30. Como llegar hora y la fecha del sello de fecha y hora en php
http://stackoverflow.com/questions/530649/is-it-possible-to-replace-monkeypatch-php-functions –
¿Puedes mostrar algún código? En mi opinión, si necesita anular 'time()' para la prueba unitaria, * puede haber * algo mal con la prueba o el código. – netcoder
la clase manipula la fecha actual. Solo quiero verificar que todas las palabras de los métodos sean correctas en todas las fechas. – happytoad