Piszę kod, który wykonuje obliczenia daty i godziny w stosunku do bieżącego czasu. W czasie Joda dostęp do niego uzyskuje się przez konstruktor (Java), ponieważ jest to obiekt niezmienny. Muszę być w stanie udawać, że new DateTime()
zwraca określoną stałą chwilę, więc mogę robić rozsądne twierdzenia testowe, ale pozostawiam wszystkie inne metody DateTime samodzielnie.W Grails, czy istnieje dobry sposób na kpiny z bieżącego czasu za pomocą czasu Joda?
To jest nieprzyjemne. Grails mockFor(DateTime, true)
nie pozwoli mi kpić z konstruktora Javy, ale nie ma żadnego oczywistego lub czytelnego, nie-konstruktywnego sposobu na zdobycie czasu w Jodzie.
Dostępne są tylko dostępne techniki JVM niskiego poziomu, takie jak szyderstwo klasy JMockit lub EasyMock 3, które są uciążliwe dla Grails. Czy istnieje prosty/prosty sposób, aby to osiągnąć?
Świetna odpowiedź. Miałem trochę nadziei, że uniknęłbym projektowania systemu inaczej, aby ten test był możliwy, ale nauczyłem się dużo o tym, jak bolesne może być kpiny z konstruktorów. –
Dzięki. Staram się unikać bezpośredniego wywoływania konstruktora - narusza to "kod interfejsu", utworzona instancja nie może być uzewnętrzniana tak jak w testach, a czasami prowadzi do 'Blobów konstrukcyjnych'. Więc sprowadza się to do formy zastrzyku zależności. –