Estoy escribiendo un código que hace cálculos de fecha y hora contra la hora actual. En el tiempo Joda, se accede a través de un constructor (Java), ya que es un objeto inmutable. Necesito poder simular para que new DateTime()
devuelva un instante constante específico para que pueda hacer afirmaciones de prueba razonables, pero deje todos los demás métodos DateTime solo.En Grails, ¿hay alguna manera de burlarse de la hora actual usando Joda time?
Esto está demostrando ser desagradable. Grails mockFor(DateTime, true)
no me dejará simular un constructor de Java, sin embargo, no existe una forma obvia o legible que no sea de constructor de obtener el tiempo en tiempo Joda.
Las únicas opciones disponibles parecen implicar técnicas de JVM de bajo nivel como JMockit o EasyMock 3 burla de clase, que son un dolor de Grails. ¿Hay una manera simple/directa de lograr esto?
Gran respuesta. Tenía la esperanza de evitar diseñar el sistema de otra forma para hacer posible esta prueba, pero aprendí mucho sobre lo doloroso que puede ser burlarse de los constructores. –
Gracias. Intento evitar la invocación directa del constructor: viola el "código para la interfaz", la instancia creada no se puede externalizar como en las pruebas, y algunas veces lleva a 'Blobs de construcción'. Entonces se redujo a una forma de inyección de dependencia. –