Sto scrivendo del codice che calcola la data e l'ora rispetto all'ora corrente. Nel tempo di Joda, questo è accessibile tramite un costruttore (Java), poiché è un oggetto immutabile. Devo essere in grado di prendere in giro in modo che new DateTime()
restituisca uno specifico istante costante in modo da poter fare test asserzioni sensate, ma lasciare tutti gli altri metodi DateTime da solo.In Grails, c'è un buon modo per prendere in giro l'ora corrente usando il tempo di Joda?
Questo si sta rivelando pericoloso. Grails mockFor(DateTime, true)
non mi permette di prendere in giro un costruttore Java, ma non c'è un modo non costruttivo ovvio o leggibile di ottenere il tempo in tempo Joda.
Le uniche opzioni disponibili sembrano coinvolgere tecniche JVM di basso livello come il mocking di classe JMockit o EasyMock 3, che sono un problema di Grails. C'è un modo semplice/diretto per raggiungere questo obiettivo?
Ottima risposta. Speravo in qualche modo di evitare di architettare il sistema in modo diverso solo per rendere possibile questo test, ma ho imparato molto su quanto possa essere doloroso fingere costruttori. –
Grazie. Cerco di evitare la chiamata diretta del costruttore - viola il "codice per l'interfaccia", l'istanza creata non può essere esternalizzata come nei test e talvolta porta a 'Construction Blobs'. Quindi si è ridotto a una forma di iniezione di dipendenza. –