Если у вас есть доступ к MessageFactory и вы хотите изменить его, тогда вы используете стандартное решение для внедрения зависимостей, как описано здесь: mock singleton
Хотя это не особенно Groovy .
В противном случае лучший обходной путь, который я нашел, - переопределить метод (ы) на самом экземпляре синглтона, например, так:
@Singleton
class Test{
def method(){"Unmocked method called"}
}
def test = Test.instance
test.metaClass.method = {-> null}
test.method() // Now returns null
Естественно, что, как синглтон, этот экземпляр не меняется (по крайней мере, в теории) ... Таким образом, переопределение методов таким образом эффективно глобально.
Редактировать: Или вы можете использовать GMock , который поддерживает насмешку над конструктором (среди прочего).