наложить карту замыкания на объект с помощью частного конструктора в groovy - PullRequest
0 голосов
/ 26 ноября 2010

Я использую groovy для создания некоторых фиктивных классов для тестового примера.Я в основном создаю фиктивные объекты, где все методы возвращают ноль, чтобы я мог запустить свой тестовый сценарий.

Я использую следующий синтаксис:

MessageFactory.instance = ["getMessage": {a,b,c,d -> "dummy"}] as MessageFactory

Так что здесь я пытаюсь переписатьЭкземпляр синглтона с моим фабричным объектом.Проблема в том, что конструктор MessageFactory является закрытым методом .Это дает мне исключение легального доступа, когда я запускаю приведенный выше код.Могу ли я создать прокси в Groovy и решить проблему с частным конструктором?

1 Ответ

1 голос
/ 26 ноября 2010

Если у вас есть доступ к 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 , который поддерживает насмешку над конструктором (среди прочего).

...