Chrono Mock
IdiomaEspañol

Una alternativa a RunAsDate, con las partes que faltaban

RunAsDate lleva años siendo la respuesta a «ejecutar este programa con otra fecha en Windows», y es una buena respuesta. Esta página trata de en qué se diferencian los dos y de dónde RunAsDate sigue siendo la mejor opción.

Lado a lado

 RunAsDateChrono Mock
Ejecuta una aplicación con una fecha falsasísí
Deja en paz el reloj del sistemasísí
Funciones de tiempo interceptadas544 (30 desplazados, 14 contados)
Reloj más rápido que el tiempo realno se ofrececualquier multiplicador entero
Congelar el relojsí, por defectosí
Saltar mientras la app se ejecutasolo volver a la fecha real, tras un número fijo de segundoshacia delante y hacia atrás, a cualquier momento
Zona horaria solo para ese procesono documentadosí, desfase fijo
Los procesos hijos heredan la sesiónno documentadosí
Engancharse a una aplicación que ya está en marchasí, desde la versión 1.40no - inicia la aplicación por sí mismo
Varias aplicaciones con fechas distintas a la vezsíno - una sesión cada vez
Te dice si funcionónoveredicto, por canal, con número de llamadas
Aplicaciones Electron y Chromiumno documentadomecanismo aparte
Línea de comandos para CIsísí, con códigos de salida y JSON
Código fuentefreeware, cerradoGPL-3.0
Tamaño47 KB de descarga, 57 KB en 64 bits~2,4 MB la línea de comandos, ~70 MB con la ventana
Versiones antiguas de Windowshasta Windows 2000Windows 10 y 11

«No documentado» significa que la función no se menciona en la página de RunAsDate. No es una afirmación de que la herramienta carezca de ella. El reloj de RunAsDate se queda quieto salvo que actives su opción Move the time forward according to the real time.

La diferencia que más importa

No es el número de canales. Es que RunAsDate te dice con honestidad, en su propia documentación, que «no afectará a las aplicaciones que toman la fecha y hora actuales de otra fuente» - y luego te deja averiguar si la tuya es una de ellas.

Chrono Mock trata esa misma frase como algo que hay que medir. Cada sesión termina con un veredicto, los canales que la aplicación leyó realmente con un recuento para cada uno, los canales que se pasaron por alto, y un aviso cuando se vio a la aplicación abrir una conexión de red antes de haber preguntado siquiera la hora al reloj.

Una aplicación que parece desplazada en el tiempo pero no lo está es peor que una que nunca se lanzó - produce una prueba superada que no significa nada. Cómo funciona la auditoría →

Cinco funciones, o 44 canales

RunAsDate intercepta GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime y GetSystemTimePreciseAsFileTime. Para una gran cantidad de aplicaciones eso es realmente suficiente, porque ahí es donde se lee el reloj de pared.

El resto de la superficie es donde suele esconderse el código que depende de la fecha:

  • la zona horaria - las dos funciones que la informan, más las seis que convierten entre zonas, que es como un informe acaba en el día equivocado
  • el eje del tiempo transcurrido - contadores de ticks y tiempo de interrupción sin sesgo, que es lo que suele medir una cuenta atrás de prueba
  • las pausas, para que un retardo sea un retardo en el reloj de la sesión y no en el real, y las esperas sobre objetos, que se cuentan y conservan su duración real
  • temporizadores - esperables, de ventana, de grupo de hilos y multimedia
  • creación de procesos, para que los hijos de un instalador se ejecuten en la misma sesión y no en el día de hoy
  • las conexiones de red, contadas como señal de que la hora puede venir de un servidor

De los 44, 30 pasan al reloj de la sesión. Los otros 14 solo se cuentan y siguen siendo reales, así que el informe los nombra sin afirmar que se desplazaron. El reloj de pared y la zona horaria se desplazan en cada sesión. El eje del tiempo transcurrido y las esperas se observan cuando lo pides con --scale-duration, y el contador de alta resolución con --scale-qpc.

Cuándo RunAsDate es la mejor opción

De verdad, y no pocas veces:

  • Necesitas una fecha, a velocidad normal, ahora mismo. RunAsDate es una descarga de menos de 60 KB, no tiene ventana que aprender y lleva muchos años haciendo exactamente esto.
  • Estás en un Windows más antiguo. RunAsDate llega hasta Windows 2000. Esta herramienta apunta a Windows 10 y 11 y no está probada en nada más antiguo.
  • El tamaño importa. 47 KB de descarga frente a ~2,4 MB para la línea de comandos, o ~70 MB con la ventana, no es una comparación ajustada.
  • No quieres un veredicto. Medir la cobertura implica leer el resultado. Si la prueba es desechable, es una carga que no pediste.
  • La aplicación ya está en marcha. RunAsDate puede engancharse a un proceso en ejecución desde la versión 1.40. Chrono Mock inicia la aplicación por sí mismo, así que una que no se puede reiniciar queda fuera de su alcance.
  • Quieres varias aplicaciones con fechas distintas a la vez. RunAsDate da a cada una su propia fecha. Chrono Mock lleva una sesión cada vez.

También pueden convivir. Nada aquí te impide conservar RunAsDate para el caso rápido.

Para qué no sirve ninguna de las dos

Ambas herramientas aparecen en las búsquedas sobre cómo alargar periodos de prueba. Esta no está hecha para eso, y ningún ejemplo, escenario ni página de aquí lo demostrará jamás. Chrono Mock sirve para probar software del que eres responsable - la caducidad de tu propia licencia, tu propia lógica de renovación, tu propio informe de fin de mes.

Es también el caso con menos probabilidades de funcionar. La protección de licencias lee la hora con frecuencia por vías elegidas para que sean difíciles de interceptar - la página de datos compartida en modo usuario, las llamadas directas al sistema, un servidor - y un reloj que retrocede es una condición que ese código está escrito para detectar. La auditoría te dirá que no funcionó, que es la respuesta honesta y no una útil.

Pruébalo