РЕДАКТИРОВАТЬ: Пожалуйста, дайте мне пояснить, я спрашиваю, как сделать это в Grails, используя Spring Dependency Injection, а НЕ функциональность метакласса Grails или new ().
У меня есть служба grails для анализа файлов журнала. Внутри сервиса я использую текущее время для множества вещей. Для модульного тестирования у меня есть несколько примеров файлов журналов, которые я анализирую с помощью этого сервиса. У них есть времена в них, очевидно.
Я хочу, чтобы моя служба DURING UNIT TESTING думала, что текущее время не превышает нескольких часов после последнего оператора записи в моих файлах журналов примера.
Итак, я готов к этому:
class MyService {
def currentDate = { -> new Date() }
def doSomeStuff() {
// need to know when is "right now"
Date now = currentDate()
}
}
Итак, что я хочу сделать - это ввести currentDate или установить его в другое HARDCODED время, например
currentDate = { -> new Date(1308619647140) }
Нет ли способа сделать это с помощью какого-нибудь макета, каким бы способом я ни занимался в моем модульном тесте? Подобные вещи были очень просты с Google Guice, но я понятия не имею, как это сделать весной.
Довольно обидно, что когда я Google "внедряю зависимость от grails", все, что я нахожу, это примеры
class SomeController {
// wow look how amazing this is, it's injected automatically!!
// isn't spring incredible OMG!
def myService
}
Мне кажется, что все, что мне показывает, это то, что мне не нужно вводить новый ... ()
Где мне сказать, что когда среда равна тесту, тогда сделайте это:
currentDate = { -> new Date(1308619647140) }
Я просто застрял, устанавливая это свойство вручную в моем тесте ??
Я бы предпочел не создавать "службу времени", потому что это кажется глупым, учитывая, что я просто хочу 1 крошечное изменение.