Вы имеете в виду «войти» как свойство, но на самом деле это не так. Предполагая, что MyClass является Groovy класса, тем свойство объявляется без частного или публичного модификатора, например:
class MyClass {
static log = LogFactory.getLog(this)
}
Что у вас есть частная статическая переменный с инициализатором. В этом случае методы доступа к ресурсам не генерируются, и переменная не считается свойством.
Поскольку это приватная переменная с инициализатором, и вы заявляете, что не хотите менять класс, вы не можете остановить запуск инициализатора. Поэтому самое лучшее, что можно сделать здесь, - выкрикнуть вызов getLog(), чтобы вернуть null. Простым, но грубым подходом будет:
LogFactory.metaClass.static.getLog = {
return null
}
, но это убьет весь поиск журнала во всем приложении. Это может быть нормально для простого модульного теста, но более конкретным решением является использование Groovy mocks (MockFor и StubFor), что позволит вам высмеивать вызов getLog в определенном блоке кода. Вы можете узнать больше here
Как интересно, почему вы не хотите, чтобы переменная журнала инициализировалась?
В вашей настройке() тестовой записи вы можете напрямую написать MyClass.log = null? –
нет, поскольку он сначала инициализирует свойство, затем он помещает нуль. Я не хочу, чтобы он перешел к методу «LogFactory.getLog». – Dvora
вы можете использовать статический блок. Попробуйте использовать следующий код: static {Myclass.metaClass.static.getLog = { return "what you need" }} –