- El mantenedor principal de Mockito anunció que para marzo de 2026 cerrará una etapa de लगभग 10 años en ese rol y que durante los próximos meses llevará adelante una transferencia gradual de responsabilidades
- Como uno de los detonantes directos de la decisión, mencionó el cambio de política sobre agentes en la JVM 22; aunque coincide con el objetivo de seguridad del cambio, señaló que la exigencia de una transición unilateral sin alternativas y la falta de consideración a nivel del ecosistema representaron una carga importante
- En particular, explicó que aunque Mockito es uno de los mayores usuarios de agentes de la JVM, terminó asumiendo la resolución del problema sin soporte de herramientas de build ni discusiones colaborativas, lo que derivó en desgaste de recursos y exceso de responsabilidad
- También señaló como otro factor la complejidad estructural del soporte para Kotlin, indicando que funciones desalineadas con la forma en que Kotlin opera sobre la JVM han aumentado las API duplicadas y la lógica condicional dentro de Mockito, dificultando el mantenimiento
- En tiempos recientes, comentó que siente más disfrute y motivación trabajando en Servo, el motor web basado en Rust, y que, considerando su tiempo personal limitado, llegó a la conclusión de que le resulta difícil seguir con una tarea voluntaria de mantenimiento que ya se siente como una obligación
El hito de los 10 años y la decisión de transferir el rol
- En marzo de 2026 se cumplirán 10 años desde que asumió el mantenimiento de Mockito, y considera ese momento como un punto natural para el traspaso de responsabilidades
- Durante los próximos meses planea enfocarse, como mantenedor actual, en transferir conocimiento y estabilizar la transición
- Las conversaciones sobre el próximo esquema de mantenimiento y la hoja de ruta a largo plazo se llevarán a cabo en un issue separado de GitHub
Desgaste por el cambio de política de agentes en la JVM
- El contexto de que en Mockito 5 el artefacto predeterminado pasara a ser un agente de la JVM está relacionado con el cambio de política en la JVM 22, donde el adjuntado dinámico de agentes quedó oculto detrás de una bandera
- Aunque está de acuerdo con la intención del cambio desde la perspectiva de seguridad, criticó que la decisión se diera por hecha sin un diseño alternativo ni apoyo para la migración
- Aun cuando Mockito se había usado frecuentemente como caso de referencia para funcionalidades de la JVM, en este cambio no funcionó un ciclo de retroalimentación colaborativo
- Evaluó que la falta persistente de soporte a nivel de herramientas de build para agentes muestra que la prioridad de esta funcionalidad sigue siendo baja
- Subrayó que, si se ejerce una presión excesiva sobre mantenedores que contribuyen voluntariamente, la estructura de colaboración del código abierto puede colapsar con facilidad
La carga estructural causada por el soporte para Kotlin
- No cuestiona la expansión de Kotlin en sí, pero debido a las diferencias en el funcionamiento interno sobre la JVM, se han agregado a
mockito-core muchos flujos de manejo específicos para Kotlin
- Existen casos en los que funciones de Kotlin, como las funciones
suspend, no operan de manera consistente, lo que incrementa la duplicación de API y la complejidad
- Como resultado, la base de código se ha vuelto más enredada y más difícil de mantener, y comentó con franqueza que ese trabajo no le resulta disfrutable a nivel personal
- Un futuro más centrado en Kotlin también ha debilitado su motivación para seguir manteniendo Mockito a largo plazo
Recuperar el disfrute en otras actividades de código abierto
- Ha contribuido a múltiples proyectos de código abierto y, recientemente, volvió a sentir la alegría de desarrollar trabajando en Servo, el motor web basado en Rust
- Entre las opciones para su tiempo libre por las noches, otros proyectos le están dando más satisfacción que Mockito de forma sostenida
- Considera que no es deseable que una tarea de mantenimiento voluntaria se sienta como una obligación durante tanto tiempo
Contexto general de la decisión y mensaje final
- El desencanto por los cambios de política en la JVM, los límites estructurales del soporte para Kotlin y la recuperación de motivación en otros proyectos fueron los factores clave de la decisión
- Reconoció que estos factores no se aplican de la misma manera a todos los contribuidores y que otras personas podrían estar más dispuestas a impulsar el soporte para Kotlin
- Decidió dejar el rol al considerar que un relevo en el mantenimiento será más beneficioso para la salud a largo plazo del proyecto
- Evaluó la experiencia misma de mantener un proyecto de código abierto como un honor y un privilegio, y animó a otras personas a participar también con contribuciones voluntarias
1 comentarios
Comentarios en Hacker News
Mientras trabajaba en mi segundo proyecto en Google, terminé abandonando por completo el mocking
Durante una reescritura del sistema con GWT se exigía cobertura de pruebas, pero cada quien probaba solo su propio servicio e inyectaba mocks con DI
Como resultado, el sistema se volvió extremadamente frágil, y un servicio de apenas 8 semanas ya se sentía como código legado
Si cambiabas el orden del backend o la cantidad de llamadas, podías pasarte todo el día ajustando mocks
La estructura de módulos de Guice también era compleja, así que para inyectar mocks en el entorno de pruebas había que crear un inyector completamente distinto, y al final testing y producción terminaron siendo entornos diferentes
Además, se desperdiciaron muchísimos recursos de ingeniería en discusiones de EasyMock vs Mockito
Desde entonces casi no uso mocks. En su lugar, me parece mucho mejor crear servicios dummy simples que imiten el comportamiento real mínimo
Todavía hoy me pongo en alerta cuando veo gente obsesionada con los mocks
He usado Mockito durante 4 años en Kotlin, y en el 99% de los casos me pareció suficientemente útil
Las situaciones complejas o confusas casi siempre se debían a mi falta de separación de responsabilidades
Casi no hay diferencia con MockK, salvo por la sintaxis. Eso sí, si Mockito deja de mantenerse, probablemente habría que pensar en reemplazarlo
Los mocks son más efectivos cuando una aplicación tiene 4 o 5 capas
Yo también antes abusaba de DI y creaba una red de código compleja, pero ahora limito las capas y mantengo una estructura consistente
Uso mocks para probar clases individuales, y pruebas de integración para validar requisitos
Al final, lo importante no es la herramienta sino la disciplina del desarrollador
Mockito es el framework de mocking más popular en Java
Por un cambio de plataforma, Mockito pasó a estar basado en agents, porque desde JVM 22 la carga dinámica de agents quedó escondida detrás de una bandera
Este tipo de cambios podría retrasar su adopción en entornos empresariales
El cambio de plataforma se sintió como una transferencia excesiva de responsabilidad hacia la comunidad de Mockito
No me parece sano culparlos diciendo que “están frenando el ecosistema JVM”
Mantener software de código abierto realmente parece un trabajo agotador
Si fuera yo, simplemente lo archivaría y me retiraría. Ojalá Tim encuentre algo de paz ahora
Quiero dejarle unas palabras de agradecimiento a TimvdLippe. Mostró una gran visión y dedicación
Mockito está bien si lo usa alguien que realmente sabe de testing
En cualquier lenguaje o framework, las malas pruebas son culpa de quien las escribe
Un “Agent” es una herramienta que se adjunta a la JVM y puede instrumentar o modificar una aplicación mientras está en ejecución
Profilers, depuradores y herramientas de monitoreo usan este mecanismo
Desde Java 21 viene desactivado por defecto por razones de seguridad, y solo se permite con la bandera
-XX:+EnableDynamicAgentLoadingPara más detalles, consulta el documento JEP 451